在循环中使用plyr时,我发现了一个奇怪的问题。 我想用这个脚本执行的是使用不同的输入值(由for循环提供)迭代plyr函数,并将结果存储为data.frames列表。
k=as.factor(c(rep("a",2), rep("b",2), rep("c",2), rep("d",2), rep("e",2)))
indata=data.frame(k)
outdata<-list()
for (i in 1:10){
tempdata<-ddply(.data = indata, .variables = .(k), .fun = summarize, i=i)
data[[i]]<-tempdata
rm(tempdata)
}
data
我希望它能生成一个data.frames列表,每个都在循环的单次迭代中生成,因此是循环变量的单个值。 相反,每个data.frames看起来都相同,每行都有一个循环变量的顺序值。
将循环变量存储到一个单独的变量中可以使它工作,但看起来似乎是一个尴尬的解决方法。
k=as.factor(c(rep("a",2), rep("b",2), rep("c",2), rep("d",2), rep("e",2)))
indata=data.frame(k)
outdata<-list()
for (i in 1:10){
z=i
tempdata<-ddply(.data = indata, .variables = .(k), .fun = summarize, i=i, z=z)
data[[i]]<-tempdata
rm(tempdata)
}
data
关于导致这种奇怪行为的任何想法?
答案 0 :(得分:0)
这是一个范围问题。 ddply
中的函数(我相信llply
)使用i
作为本地变量,并且在搜索路径中的i
之前。最简单的修复方法是使用j
作为迭代器:
for (j in 1:10)
但是,我不知道你为什么在你的例子中使用ddply
。它似乎没必要,所以我认为它只是一个玩具的例子。