R创建一个具有循环结构的向量

Ric*_*rdo 1 r

我有一个列表,listDFs其中每个元素都是一个数据框.每个数据框具有不同的行数和相同的列数.

我应该从listDFs [[i]] $ Name开始创建一个向量,从列表中提取所有i元素.

我想用一个循环这样:

vComposti <- c()
for(j in 1:10){vComposti <- c(listDFs[[j]]$Name)}
Run Code Online (Sandbox Code Playgroud)

但结果是一个向量只包含列表的第一级(listDFs [[1]] $ Name).

哪里错了?你有什么建议吗?

jor*_*ran 6

你遇到的问题是这一行:

vComposti <- c(listDFs[[j]]$Name)
Run Code Online (Sandbox Code Playgroud)

每次循环时,您都会重新分配新值vComposti覆盖之前的值.

通常,最好预先分配向量并按元素填充元素:

vComposti <- rep(NA, 10)
for(j in 1:10){
    vComposti[j] <- c(listDFs[[j]]$Name)
}
Run Code Online (Sandbox Code Playgroud)

但是我也不清楚你到底想要的结果是什么.您创建了一个向量,但看起来您正试图在向量的每个元素中存储整个数据框列.如果是这种情况,您实际上可能正在寻找一个列表的结果:

vComposti <- vector("list",10)
for(j in 1:10){
    vComposti[[j]] <- c(listDFs[[j]]$Name)
}
Run Code Online (Sandbox Code Playgroud)

另一个更复杂的选择可能是使用lapply:

lapply(listDFs,FUN = "[","Name")
Run Code Online (Sandbox Code Playgroud)