我喜欢编写一个循环或函数来计算最后生成的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"
但是,这取决于您始终使用特定的代码模式进行赋值,因此它不是很通用。