【发布时间】:2019-06-07 07:28:23
【问题描述】:
我想用一个函数替换这个 (want):
library(tidyverse)
library(rlang)
set.seed(1)
create_a <- function() {
list(x = 1:10, y = data.frame(aa = round(rnorm(10, 2000, 10), 0),
bb = sample(letters[3:8], 10, replace = T),
stringsAsFactors = F))
}
create_b <- function() {
list(x = 1:10, y = data.frame(aa = round(rnorm(10, 10, 1), 0),
bb = sample(letters[3:8], 10, replace = T),
stringsAsFactors = F))
}
want <- list(x = reduce(map(list(create_a(), create_b()), 1), c),
y = reduce(map(list(create_a(), create_b()), 2), rbind)) # or bind_rows
有多个函数(create_a 和 create_b)可以创建具有相同名称的元素的输出列表。与上面的例子相比,实际函数中的计算有很大的不同。
该函数应如下所示:
multiple_reduce <- function(...) {
# ????
}
want <- multiple_reduce(create_a(),
create_b())
你是如何使用整洁的方法做到这一点的?
want 在这两种情况下都应该是这样的:
$x
[1] 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10
$y
aa bb
1 2014 e
2 1999 g
3 2004 e
4 1999 d
5 1986 g
6 1996 d
7 1996 g
8 1999 c
9 2011 d
10 2008 c
11 9 h
12 10 g
13 11 e
14 10 e
15 11 c
16 10 c
17 9 g
18 10 c
19 9 e
20 11 f
【问题讨论】:
-
您能提供当前和预期的输出吗?目前是XY problem。
-
您想基于相同的名称组合它们吗?还是基于同一类型?
-
我想将
x(或不同列表中的第 1 位)组合成一个单一的聚合x,并将y组合成一个y。我要聚合的函数的结果列表的顺序和名称是一样的。 -
这样接近吗:
map2(create_a(),create_b(),function(x,y) rbind(x,y))? -
是的,除了向量应该连接起来 (
c)。另一方面,pmap(create_a(),create_b(), create_b(),function(...) rbind(...))似乎不起作用。