通常如何引用R中最后生成的(<-)对象(在我的例子中是data.frame)?



我喜欢编写一个循环或函数来计算最后生成的data.frame的名称(!(。根据上次使用的数据框的名称,我想执行某些操作。

   df_head <- data.frame("age" = c(19, 21), 
               sex = c("m", "f"))

    ifelse(  str_detect(deparse(substitute(df_head)), "head", negate = FALSE),
         head(df_head), tail(df_head)
         ) 
    df_tail <- data.frame("age" = c(17, 04), 
                          sex = c("m", "f"))

    ifelse(  str_detect(deparse(substitute(df_tail)), "head", negate = FALSE),
             head(df_tail), tail(df_tail)
    )

我创建了多个数据框,例如示例中的df_head和df_tail。根据它们的名称,我将执行大量数据转换。我并不总是想复制条件数据转换,将名称粘贴到相应的位置等等......

相反,我想要更短的东西,例如:

 df_head <- data.frame("age" = c(19, 21), 
                   sex = c("m", "f"))

       x <- last generated Dataset 
ifelse(str_detect(deparse(substitute(x)), "head", negate = FALSE),
                 head(x), tail(x)
        )

    df_tail <- data.frame("age" = c(17, 04), 
                              sex = c("m", "f"))
   x <- last generated dataset 
ifelse(str_detect(deparse(substitute(x)), "head", negate = FALSE),
                 head(x), tail(x)
        )

但是我不知道,如何引用/抓取最后生成的数据集。

R 不会保留以前命令的记录,这些记录足够详细,无法执行您想要的操作。 R的一些前端可以,但不是全部。

如果您使用的是这些前端之一,则此代码可能有效:

lastAssigned <- function(match = "<- *data.frame",
                         remove = " *<-.*") {
  f <- tempfile()
  savehistory(f)
  history <- readLines(f)
  unlink(f)
  match <- grep(match, history, value = TRUE)
  sub(remove, "", match[length(match)])
}

在你的第一句话之后,我看到

> lastAssigned()
[1] "df_head"

但是,这取决于您始终使用特定的代码模式进行赋值,因此它不是很通用。

相关内容

最新更新