动态为R中的向量分配变量名?

时间:2016-10-28 04:45:37

标签: r vector dataframe

我是R的新手,我正在尝试在for循环中创建引用向量的变量,其中循环的索引将附加到变量名称。但是,下面的代码,我试图将新向量插入到较大数据框中的适当位置,不起作用,我尝试了很多变体的get(),as.vector(),eval( )等在数据框构造函数中。

我想将num_incorrect.8和num_incorrect.9作为值为0的向量,然后插入到mytable中。

cols_to_update <- c(8,9)

for (i in cols_to_update)
{
#column name of insertion point
insertion_point <- paste("num_correct",".",i,sep="")
#create the num_incorrect col -- as a vector of 0s
assign(paste("num_incorrect",".",i,sep=""), c(0))

#index of insertion point
thespot <- which(names(mytable)==insertion_point)
#insert the num_incorrect vector and rebuild mytable 
mytable <- data.frame(mytable[1:thespot], as.vector(paste("num_incorrect",".",i,sep="")), mytable[(thespot+1):ncol(mytable)])
#update values
mytable[paste("num_incorrect",".",i,sep="")] <- mytable[paste("num_tries",".",i,sep="")] - mytable[paste("num_correct",".",i,sep="")] 
}

当我查看列插入的方式时,它看起来像这样:

 [626] "num_correct.8"                                         
 [627] "as.vector.paste..num_incorrect........i..sep........2"
...
 [734] "num_correct.9"                                         
 [735] "as.vector.paste..num_incorrect........i..sep........3" 

基本上,它看起来像是将我的命令作为文字文本。最后一行代码按预期工作,并在数据框的末尾创建新列(因为它之前的行没有将列插入正确的位置):

[1224] "num_incorrect.8"                                       
[1225] "num_incorrect.9" 

我有点想法,所以如果有人可以请给我解释什么是错的,为什么,以及如何解决它,我会很感激。谢谢!

1 个答案:

答案 0 :(得分:0)

错误出现在代码的倒数第二行,不包括创建向量并将其添加到数据框的注释。

您只需添加矢量并更新名称即可。您可以删除assign函数,因为它不是创建向量而只是为变量赋值0

而不是代码的倒数第二行,而是将代码放在下面,它应该可以正常工作。

#insert the vector at the desired location
mytable <- data.frame(mytable[1:thespot], newCol = vector(mode='numeric',length = nrow(mytable)), mytable[(thespot+1):ncol(mytable)])

#update the name of new location
names(mytable)[thespot + 1] = paste("num_incorrect",".",i,sep="")