我正在尝试学习使用不同的方法来使用列表中的对象作为...
.mergeMap((ids) => {
const observables = ids.map(id => this.db.collection('posts').doc(id))
return Observable.forkJoin(observables)
})
中的FUN
参数。取得以下数据:
lapply
所需结果:
A <- list(a = matrix(0, ncol = 3, nrow = 3), b = matrix(0, ncol = 3, nrow = 3))
B <- list(a = matrix(1, ncol = 1, nrow = 3), b = matrix(1, ncol = 1, nrow = 3))
D <- mapply(FUN="list", A, B, SIMPLIFY=F, USE.NAMES=F)
D <- lapply(D, `names<-`, c("first", "second"))
D
[[1]]
[[1]]$`first`
[,1] [,2] [,3]
[1,] 0 0 0
[2,] 0 0 0
[3,] 0 0 0
[[1]]$second
[,1]
[1,] 1
[2,] 1
[3,] 1
[[2]]
[[2]]$`first`
[,1] [,2] [,3]
[1,] 0 0 0
[2,] 0 0 0
[3,] 0 0 0
[[2]]$second
[,1]
[1,] 1
[2,] 1
[3,] 1
这是我通常的做法:
[[1]]
[,1] [,2] [,3]
[1,] 0 0 0
[2,] 0 0 0
[3,] 0 0 0
[4,] 1 1 1
[[2]]
[,1] [,2] [,3]
[1,] 0 0 0
[2,] 0 0 0
[3,] 0 0 0
[4,] 1 1 1
现在,我想知道是否有一种避免使用lapply(D, function(x) rbind(x$first, as.numeric(x$second)))
并重复所有这些 x 的方法。像这样:
function(x)
如何让lapply(D, "rbind", <args>)
(或任何其他函数)知道我正在引用rbind
框架内的对象?
谢谢
K。
答案 0 :(得分:1)
更新
根据注释,更改了代码以仅保留正确的解决方案。
正如一些评论员所说,问题是B
需要进行调换才能找到一个优雅的解决方案。您应该看看library(purrr)
,因为这样整个问题就会减少为:
map2(A, B, ~ rbind(.x, t(.y)))
# $`a`
# [,1] [,2] [,3]
# [1,] 0 0 0
# [2,] 0 0 0
# [3,] 0 0 0
# [4,] 1 1 1
# $b
# [,1] [,2] [,3]
# [1,] 0 0 0
# [2,] 0 0 0
# [3,] 0 0 0
# [4,] 1 1 1
map2
的作用是接收2个列表,并将函数应用于这些列表的每个元素。 ~
语法是function(.)
答案 1 :(得分:1)
要“避免使用function(x)
并重复所有这些x
”,我们可以使用with()
:
lapply(D, with, rbind(first, as.numeric(second)))