将通用函数应用于所有数据帧并返回具有相同名称的数据帧
我试图将函数应用于全局环境中的所有类似拼写的数据帧。我想将此函数应用于所有这些数据帧,但我无法弄清楚如何在没有我的情况下指定1。我希望将数据框返回到与以前相同的拼写全球环境。将通用函数应用于所有数据帧并返回具有相同名称的数据帧
mtcars_test = mtcars
iris_test = iris
#....etc......could be 2 of them or 88 of them...but they will all end in "_test"
# figure out what data frames I am working with
list_of_my_dfs = lapply(ls(pattern = "*_test"), get)
#my function just multiples everything by 2
mytest_function = function(df){ df = df*2; return(df)}
helpme_return_these_dfs_to_outside_the_list=plyr::llply(list_of_my_dfs, mytest_function)
这是我需要帮助的地方。我想将我的函数应用于列表中的每个数据框,然后将该列表中的数据框'返回'到我的环境中。因此,mtcars_test
和其他所有数据帧都将乘以2并返回到全局环境。
您可以使用eapply
遍历环境,然后使用assign
将对象存储到您的全局环境。 eapply
的函数参数将是一个匿名函数,它首先从全局获取df,将其分配给一个临时变量,将其传递给您的函数,然后使用assign将其放回全局。
我会告诉你的代码,但如果你不能自己编码,你真的不应该这样做。
你能举个例子吗?我从来没有听说过这个功能。 – runningbirds
阅读帮助文件!你想要做的事情是先进的,阅读危险,所以你真的需要花时间学习你在做什么。 – adamleerich
@adamleerich; *“我会告诉你代码,但如果你不能自己编码,你真的不应该这样做。”*:这种情绪在问答网站面前苍蝇,尽管同意分配应该是非常小心地使用(如果有的话) – user20650
1)环境下标设置e
包含数据帧,然后得到他们的名字和循环在他们的环境,如下所示:
BOD_test <- BOD # not all columns of iris are numeric so use BOD instead
mtcars_test <- mtcars
e <- .GlobalEnv
nms <- ls(pattern = "_test$", envir = e)
for(nm in nms) e[[nm]] <- mytest_function(e[[nm]])
1A)分配的替代方法的最后一条语句会是:
for(nm in nms) assign(nm, mytest_function(get(nm, e)), e)
2)列出你可能想,相反,以保持数据帧列表:
L <- sapply(nms, get, envir = e, simplify = FALSE)
L[] <- lapply(L, mytest_function)
2A)sapply或者,如果你不希望覆盖L
则:
sapply(L, mytest_function, simplify = FALSE)
为什么不把一切都在开始与一个列表? – zx8754
我可以将它保存在一个列表中,但为了我目前的目的,我需要将它们提取出来。我已经知道如何做到这一点,并认为我现在正在这样做。 – runningbirds
“答案”可能是'list2env',但请不要打扰。把它们放在一个列表中。 – joran