我是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"
我有点想法,所以如果有人可以请给我解释什么是错的,为什么,以及如何解决它,我会很感激。谢谢!
答案 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="")