我需要将几个不同维度的数据帧传递给另一个函数,然后逐个处理这些数据框。我该怎么做
我试过
frame <- c(df1,df2,df3...)
p <- function(frame) {
for(i in 1:seq_along(frame) {
do_something(frame[i])
.....
}
}
但这不起作用。
答案 0 :(得分:1)
注意R中向量和列表之间的区别很重要。向量包含相同类的原子(简单)对象(即所有数字,所有字符等)。列表可以包含异构类型的对象。列表还可以包含其他列表(向量不能嵌套)。
在R中,data.frames实际上只是花哨的列表,所以如果你想要它们的集合,你需要一个data.frames列表
frame <- list(df1,df2,df3...)
当您从列表中提取对象时,您需要使用[[ ]]
来获取元素,而不是[ ]
,它仅用于对列表进行子集(并且它将始终返回列表)。所以你的循环应该写成
p <- function(frame) {
for(i in 1:seq_along(frame)) {
do_something(frame[[i]])
}
}
但很少我们需要在R中编写类似的内容。通过列表lapply
通常会更好
p <- function(frame) {
lapply(frame, do_something)
}
但最终取决于你的代码实际上在做什么。