赋值函数中的值名称作为字符串
value name as string in assign function
我想在循环中使用不同的数据帧。我在访问循环内的不同数据帧时遇到问题。
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(x, value)
,其中x
是变量名,value
是要分配给该变量名的对象
目前,你有这个:
...
assign("CurrentData", paste("Data", i, sep=""))
## This is equivalent to: CurrentData <- "Data1"
...
您正在为 CurrentData 分配 字符串值 :"Data1"、"Data2"、"Data3" 但不是相同对象的值自己命名。
尝试使用 ?get
。像这样:
...
assign("CurrentData", get(paste("Data",i,sep="")))
...
奖金:
为此,您最好使用 colMeans(x)
。
你的赋值语句需要像这样
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
来避免所有数据帧被强制转换为一个大向量。
我想在循环中使用不同的数据帧。我在访问循环内的不同数据帧时遇到问题。
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(x, value)
,其中x
是变量名,value
是要分配给该变量名的对象
目前,你有这个:
...
assign("CurrentData", paste("Data", i, sep=""))
## This is equivalent to: CurrentData <- "Data1"
...
您正在为 CurrentData 分配 字符串值 :"Data1"、"Data2"、"Data3" 但不是相同对象的值自己命名。
尝试使用 ?get
。像这样:
...
assign("CurrentData", get(paste("Data",i,sep="")))
...
奖金:
为此,您最好使用 colMeans(x)
。
你的赋值语句需要像这样
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
来避免所有数据帧被强制转换为一个大向量。