R 在列表上迭代/循环

R 在列表上迭代/循环,r,list,loops,R,List,Loops,我有一些街道上的数据,我运行了这个R代码以获取列表中38个csv文件的内容(将来将添加更多文件): common\u path在执行for循环时,i是一个列表,而不是索引。如果需要索引,应该使用函数为列表返回索引向量。检查此示例: > l = list("apple", "banana", "carrot") > l [[1]] [1] "apple" [[2]] [1] "banana" [[3]] [1] "carrot" > for(p in l) print(p)

我有一些街道上的数据,我运行了这个R代码以获取列表中38个csv文件的内容(将来将添加更多文件):


common\u path在执行for循环时,
i
是一个列表,而不是索引。如果需要索引,应该使用函数为列表返回索引向量。检查此示例:

> l = list("apple", "banana", "carrot")
> l
[[1]]
[1] "apple"

[[2]]
[1] "banana"

[[3]]
[1] "carrot"

> for(p in l) print(p)
[1] "apple"
[1] "banana"
[1] "carrot"
> for(i in seq_along(l)) print(i)
[1] 1
[1] 2
[1] 3

在for循环中,始终必须指定循环的开始位置和结束位置。您希望遍历列表中的每个元素,这意味着您需要
for(i in seq_-along(data_-lst))

沿着(data_lst)运行
seq_将创建一个从1到列表中元素数量的序列。

如果您想对列表中的每个条目执行相当复杂的操作,最好通过编写函数来分离您希望应用于每个条目的逻辑。这使您的代码更可读、更模块化,并且在将来更容易调试或修改

在您的例子中,您可以编写一个函数,对列表中的每个数据帧进行操作,以创建不同组件的命名列表:所有您想要的命名注释,以及修改后的数据帧。也许是这样的:


将数据框更改为命名列表将图像粘贴为文本,阅读可复制的示例。谢谢,这似乎比循环更有效!是否有一种平滑的方式将所有列表元素合并到一个巨大的TIBLE/数据帧中?我使用
data\u lst%>%reduce(full\u join)
,这需要相当长的时间并产生大量警告。在本例中,您将执行
do.call(“rbind”,lappy(result,function(x)x$data))
。这个大数据框不会包含所有单独的注释:这些注释在逻辑上不属于数据框的任何行。谢谢Allan。问题是,我需要将这些信息保存到文件中。现在我把它作为变量放在每个数据帧中。这在逻辑上似乎是错误的,但它对我有效,我拥有每一行的所有信息。我对我现在得到的结果感到高兴。不过,这样做可能会更顺利。@OscarThees如果你想这样做,请参阅我的更新。
for(i in data_lst){
  data_lst[[i]]$serial <- data_lst[[i]]$notes[1]
}

> l = list("apple", "banana", "carrot")
> l
[[1]]
[1] "apple"

[[2]]
[1] "banana"

[[3]]
[1] "carrot"

> for(p in l) print(p)
[1] "apple"
[1] "banana"
[1] "carrot"
> for(i in seq_along(l)) print(i)
[1] 1
[1] 2
[1] 3