对全局环境中的每个数据框应用操作
Applying an operation to every dataframe in the global environment
我想为我工作区中的每个数据框创建一个预测矩阵(使用鼠标)。我想做以下事情:
library(mice)
PredMatr = list()
try (for (i in 1:length(ls())) {
PredMatr [[i]]=quickpred(get(ls()[i]), mincor=.1)
})
但是当它遇到与工作区中的数据框不同的东西时它会停止。我如何调整我的代码以使操作以对象为数据框为条件?
您可以添加
if(!is.data.frame(get(ls()[i]))) next;
到你的代码中,然后循环会在遇到非data.frame结构时跳到下一次迭代。
回复评论
library(mice)
PredMatr = list()
try (for (i in 1:length(ls())) {
if(!is.data.frame(get(ls()[i]))) next;
PredMatr [[i]]=quickpred(get(ls()[i]), mincor=.1)
})
应该可以解决问题。
您可以使用 eapply
来测试环境中的哪些对象是 class data.frame
并且只使用这些对象。例如使用:
Myls<-ls(sorted=F)[eapply(.GlobalEnv, class)=="data.frame"]
现在 Myls
是 data.frame
对象名称的列表。然后可以将这些输入 get()
eapply
类似于 lapply
但它适用于环境中的每个对象,而不是列表中的每个对象。
编辑添加:
要在原始问题中使用它,您可以执行以下操作:
library(mice)
PredMatr = list()
Myls<-ls(sorted=F)[eapply(.GlobalEnv, class)=="data.frame"]
try (for (i in 1:length(Myls)) {
PredMatr [[i]]=quickpred(get(Myls[i]), mincor=.1)
})
我想为我工作区中的每个数据框创建一个预测矩阵(使用鼠标)。我想做以下事情:
library(mice)
PredMatr = list()
try (for (i in 1:length(ls())) {
PredMatr [[i]]=quickpred(get(ls()[i]), mincor=.1)
})
但是当它遇到与工作区中的数据框不同的东西时它会停止。我如何调整我的代码以使操作以对象为数据框为条件?
您可以添加
if(!is.data.frame(get(ls()[i]))) next;
到你的代码中,然后循环会在遇到非data.frame结构时跳到下一次迭代。
回复评论
library(mice)
PredMatr = list()
try (for (i in 1:length(ls())) {
if(!is.data.frame(get(ls()[i]))) next;
PredMatr [[i]]=quickpred(get(ls()[i]), mincor=.1)
})
应该可以解决问题。
您可以使用 eapply
来测试环境中的哪些对象是 class data.frame
并且只使用这些对象。例如使用:
Myls<-ls(sorted=F)[eapply(.GlobalEnv, class)=="data.frame"]
现在 Myls
是 data.frame
对象名称的列表。然后可以将这些输入 get()
eapply
类似于 lapply
但它适用于环境中的每个对象,而不是列表中的每个对象。
编辑添加: 要在原始问题中使用它,您可以执行以下操作:
library(mice)
PredMatr = list()
Myls<-ls(sorted=F)[eapply(.GlobalEnv, class)=="data.frame"]
try (for (i in 1:length(Myls)) {
PredMatr [[i]]=quickpred(get(Myls[i]), mincor=.1)
})