簡體   English   中英

與列表的所有向量成對比較

[英]pairwise comparison with all vectors of a list

例如,我有一個包含 5 個向量的列表,並且想比較它們中的每一個。 例子

L = list(c(1:5), c(-1:-5), c(3:7), c(-4:-8), c(5:9))
[[1]]
[1] 1 2 3 4 5

[[2]]
[1] -1 -2 -3 -4 -5

[[3]]
[1] 3 4 5 6 7

[[4]]
[1] -4 -5 -6 -7 -8

[[5]]
[1] 5 6 7 8 9

我還有一個函數可以在列表的 5 個元素之間進行成對比較:

foo = function(x, y) t(x) %*% abs(y)

我想應用foo對我的列表進行成對比較。 例如:成對比較(foo 的“x”和“y”):

[[1]]and [[2]]
[[1]]and [[3]]
[[1]]and [[4]]
[[1]]and [[5]] 
[[2]]and [[3]]
[[2]]and [[4]]
[[2]]and [[5]]
[[3]]and [[4]]
[[3]]and [[5]]
[[4]]and [[5]]
...
My original file has 1000 elements

我嘗試使用:lapply(L, foo) 但我有以下消息錯誤:```參數“y”丟失,沒有默認````

如何將 foo 應用於我的列表?

outer呢?

> outer(L, L, Vectorize(foo))
     [,1] [,2] [,3] [,4] [,5]
[1,]   55   55   85  100  115
[2,]  -55  -55  -85 -100 -115
[3,]   85   85  135  160  185
[4,] -100 -100 -160 -190 -220
[5,]  115  115  185  220  255

也許結合combnapplylapply

L = list(c(1:5), c(-1:-5), c(3:7), c(-4:-8), c(5:9))
foo = function(x, y) t(x) %*% abs(y)

setNames(lapply(apply(combn(seq_along(L), 2), 2, function(x) L[x]), 
       function(z) foo(z[[1]], z[[2]])),
       apply(combn(seq_along(L), 2), 2, paste, collapse = "-"))
#> $`1-2`
#>      [,1]
#> [1,]   55
#> 
#> $`1-3`
#>      [,1]
#> [1,]   85
#> 
#> $`1-4`
#>      [,1]
#> [1,]  100
#> 
#> $`1-5`
#>      [,1]
#> [1,]  115
#> 
#> $`2-3`
#>      [,1]
#> [1,]  -85
#> 
#> $`2-4`
#>      [,1]
#> [1,] -100
#> 
#> $`2-5`
#>      [,1]
#> [1,] -115
#> 
#> $`3-4`
#>      [,1]
#> [1,]  160
#> 
#> $`3-5`
#>      [,1]
#> [1,]  185
#> 
#> $`4-5`
#>      [,1]
#> [1,] -220

reprex 包( v2.0.0 ) 於 2021 年 10 月 25 日創建

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM