[英]Using objects inside list as function arguments in lapply
我試圖學習不同的方法來使用列表中的對象作為lapply
的FUN
參數。 拿這個數據:
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)))
現在我想知道是否有辦法避免使用function(x)
並重復所有那些x s。 就像是:
lapply(D, "rbind", <args>)
我如何讓rbind
(或任何其他函數)知道我指的是lapply
框架內的對象?
謝謝,
K.
更新
根據提交更改代碼以保持正確的解決方案。
正如一些評論員所說,問題在於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(.)
的快捷方式function(.)
要“避免使用function(x)
並重復所有那些x
s”,我們可以使用with()
:
lapply(D, with, rbind(first, as.numeric(second)))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.