在循环中,我试图将类因子的列向量转换为数字。
如果没有循环,代码看起来像
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]])))
返回“第一个参数无效”的错误。
有什么想法吗?
谢谢,
罗伯托答案 0 :(得分:1)
$
运算符在内部是一个可以显式调用"$"
来获取和"$<-"
进行设置的函数。 assign
与get
相反。因此我们将事情分解为不同的步骤:
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)))