我想在循环中使用不同的数据框。我在访问循环中的不同数据帧时遇到问题。

Data1<-data.frame(X=rnorm(100,2), Y=rnorm(200,2), Z=rnorm(200,2))
Data2<-data.frame(X=rnorm(300,500), Y=rnorm(300,500))
Data3<-data.frame(X=rnorm(500,200), Y=rnorm(20,200))

for (i in c(1:3)){
assign("CurrentData", paste("Data", i, sep=""))
colMeans(CurrentData)
}
assign 函数没有做我想要的,因为它认为第二个参数是一个字符串而不是对象的名称。我怎样才能解决这个问题?

最佳答案

你的assign语句需要是这样的

assign("CurrentData", eval(as.name(paste("Data", i, sep="")))
as.name 调用将字符串转换为符号名称,然后 eval 实际获取符号的值。

还有其他方法可以做到这一点,但这清楚地表达了意图。

实现您想要的更简单的方法是这样
Data1<-data.frame(X=rnorm(100,2), Y=rnorm(200,2), Z=rnorm(200,2))
Data2<-data.frame(X=rnorm(300,500), Y=rnorm(300,500))
Data3<-data.frame(X=rnorm(500,200), Y=rnorm(20,200))

for (CurrentData in list(Data1, Data2, Data3)){
    somefunction(CurrentData)
}

注意我使用 list 来避免所有数据帧被强制转换为一个大向量。

10-08 05:59