作者:关注前世男友 | 来源:互联网 | 2023-08-13 18:49
我有以下双重循环:
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)
现在,我想遍历这两个列表,并将名称为“ index”的列与输入index [1]一起添加到文件[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”在数字向量“ for(i在1:87)中循环”
for (index in 1:87) {
assign( files[i],`[[<-`(get(files[i]),'index',value = indexnames[i] ))
}
我在此答案中找到了一些帮助:
How to use `assign()` or `get()` on specific named column of a dataframe?