我有一个列表listDFs
,其中每个元素都是一个数据框。每个数据框具有不同的行数和相同的列数。
我应该从 listDFs [[i]] $ Name 开始创建一个向量,从列表中提取所有 i 元素。
我想用一个循环:
vComposti <- c()
for(j in 1:10){vComposti <- c(listDFs[[j]]$Name)}
但结果是一个只包含列表第一级( listDFs [[1]] $ Name )的向量。
哪里错了?你有什么建议吗?
答案 0 :(得分:6)
你遇到的问题是:
vComposti <- c(listDFs[[j]]$Name)
每次循环播放时,您都重新分配一个新值vComposti
并覆盖之前的值。
通常,最好预先分配矢量并按元素填充元素:
vComposti <- rep(NA, 10)
for(j in 1:10){
vComposti[j] <- c(listDFs[[j]]$Name)
}
但我也不清楚你对结果的期望是什么。您创建了一个向量,但看起来您正试图在向量的每个元素中存储整个数据框列。如果是这种情况,您实际上可能正在寻找一个列表的结果:
vComposti <- vector("list",10)
for(j in 1:10){
vComposti[[j]] <- c(listDFs[[j]]$Name)
}
另一个更复杂的选项可能是使用lapply
:
lapply(listDFs,FUN = "[","Name")