引用循环内数据框中的列向量

时间:2010-07-29 05:09:24

标签: r

在循环中,我试图将类因子的列向量转换为数字。

如果没有循环,代码看起来像

c1$values <- as.numeric(as.character(c1$values))

但是如何通过循环引用c1 $值?我尝试了两种方法:

get(paste('c',i,"$values", sep="")) 

即使在循环之外也不起作用,而

get(paste('c',"1", sep=""))[[1]]

自身工作(返回列向量),但在尝试执行操作时:

assign(get(paste("c","1", sep=""))[[1]], as.numeric(as.character(get(paste("c","1", sep=""))[[1]])))

返回“第一个参数无效”的错误。

有什么想法吗?

谢谢,

罗伯托

3 个答案:

答案 0 :(得分:1)

$运算符在内部是一个可以显式调用"$"来获取和"$<-"进行设置的函数。 assignget相反。因此我们将事情分解为不同的步骤:

varname<-paste("c",1,sep="")
obj<-get(varname)
x<-"$"(obj,"values")
x<-as.numeric(as.character(x))
obj<-"$<-"(obj,"values",x)
assign(varname,obj)

但是将数据(例如索引)编码为变量名称并不是一种好习惯。将c1,c2等转换为列表或数据框然后迭代它们可能是更好的主意。转换可以通过以下方式完成:

lapply(1:2,function(i) get(paste('c',i,sep='')))

答案 1 :(得分:1)

您也可以按整数索引列。 R网站上的R介绍指南对此进行了解释。

答案 2 :(得分:0)

不是将你的因子变量转换为数字,而是最好先弄清楚为什么它们首先变成了因子。

然而,由于没有其他人为您解决问题,所以这里有一个简单的解决方案:

factors <- sapply(c1, is.factor)
c1[factors] <- lapply(c1[factors], function(x) as.numeric(as.character(x)))