假设您有环境中已经存在的data.frame列表:

library(magrittr)
lapply(
  paste0("z", 2011:2015),
  function(x) assign(
    x,
    data.frame(x=rnorm(10),y=rnorm(10)),
    pos = 1
  )
)
# should create z2011 through z2015 in your R env

我想做的是:提取一列,将它们合并到一个data.frame中,然后添加一个附加变量以使用magrittr语法来标识它们来自何处。

我意识到使用其他技术(即ldply(list)rbind.fill(listing)rbind_all(listing)do.call(rbind,...))是一件微不足道的事情。我的问题的重点是了解使用magrittr语法的方法。
df <-
   paste0("z",2011:2015) %>%
   lapply(get) %>%
   lapply(function(x) extract2(x,"x")) %>%
   # what would you do next? Another approach you think is
   # more appropriate for magrittr?

我不知道如何添加新变量。举例来说,我想得出以下结论:
do.call(
  rbind,
  lapply(
    paste0("z",2011:2015),
    function(x) {
      data.frame(x = get(x)$x, year = x)
    }
  )
)

最佳答案

我一直认为,通过进行嵌套调用并将其内翻,您会得到magrittr -idiomatic方法。因此,对您的最后一个片段执行此操作

paste0("z", 2011:2015) %>%
  lapply(function(name) data.frame(x = get(name)$x, year = name)) %>%
  do.call(rbind, .)

在我看来,这很好。我不是将每个可能的语句分解为x %>% foo1 %>% foo2 %>% ...的忠实粉丝,在这种情况下,这是有道理的:否则,您将不得不再次重复paste0调用以重建变量名(如注释中所建议)。

关于r - 使用magrittr语法将变量添加到data.frames列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31713008/

10-12 20:17