假设您有环境中已经存在的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/