R 使用双循环添加列

R 使用双循环添加列,r,loops,R,Loops,我有以下双循环: indexnames = c(a, b, c, d, etc.) # with # length(indexnames) = 87 # class(indexnames) = "character" # (indexnames = indexes I want to add in a column) files = c(aname, bname, cname, dname, etc.) # with # length(files) = 87 # class(files)

我有以下双循环:

indexnames = c(a, b, c, d, etc.) 
# with
# length(indexnames) = 87
# class(indexnames) = "character"
# (indexnames = indexes I want to add in a column)

files = c(aname, bname, cname, dname, etc.) 
# with
# length(files) = 87
# class(files) = "character"
# (files = name of files in the global environment)
现在我想循环遍历这两个列表,并在文件[1]中添加一列名为“index”的输入索引[1]。我通过以下方式实现了这一点:

for(i in files){
    for(j in indexnames){
      files[i] = cbind(Index = indexnames[j], files[i])
    }
}
当我运行此命令时,会收到一条错误消息,其中包含50条或更多警告。 我做错了什么? 感谢您的帮助。

您需要使用get()和assign()函数来获得所需的行为

实际上,在创建循环时,不必在名称元素中使用i或j。如果以更易于理解的方式命名循环,则调试循环会更容易。还是让我们看看循环的内部部分

files[i]
给定的文件是一个向量,您不能以这种方式通过其值调用特定元素(您也不想这样做,因为它只是一个带有对象名称的向量)。取而代之的是,让“i”在一个数字向量中循环(i在1:87中)

for(索引为1:87){

分配(文件[i],`[[为错误创建一个可复制的示例。当您运行
warnings()
时会发生什么情况?我可以看到
文件[i]=cbind(Index=indexnames[j],files[i])
的左右两侧都有
文件[i]
——我认为这可能是有问题的。同样,当您作为
进行循环时(i在文件中)
i
不是索引,但是
文件中的实际值
-所以
文件[i]
没有意义,我认为。如果你想循环
文件的索引
,你可以将迭代更改为
(沿(文件)的顺序中的i)
。尝试
列表(aname、bname、cname、dname等)
,在循环
文件[[i]]中,我得到以下错误:在文件名[i]中
for (index in 1:87) {
  assign( files[i] , `[[<-`(get(files[i]), 'index', value = indexnames[i] ))
}