如何将列表/向量/数组帧发送到R中的函数

时间:2015-06-17 15:41:12

标签: r dataframe

我需要将几个不同维度的数据帧传递给另一个函数,然后逐个处理这些数据框。我该怎么做

我试过

frame <- c(df1,df2,df3...)

p <- function(frame) {
  for(i in 1:seq_along(frame) {
     do_something(frame[i])
     .....
   }
} 

但这不起作用。

1 个答案:

答案 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)
} 

但最终取决于你的代码实际上在做什么。