我想为我的工作区中的每个数据框创建一个预测矩阵(使用鼠标)。我想做以下事情:
library(mice)
PredMatr = list()
try (for (i in 1:length(ls())) {
PredMatr [[i]]=quickpred(get(ls()[i]), mincor=.1)
})
但是,当遇到与工作空间中的数据框不同的内容时,它将停止。我该如何修改代码以使操作取决于作为数据帧的对象?
答案 0 :(得分:2)
您可以添加
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)
})
应该做到这一点。
答案 1 :(得分:2)
您可以使用eapply
来测试环境中的哪些对象为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)
})