我有一个列表,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).
哪里错了?你有什么建议吗?
你遇到的问题是这一行:
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)