强制 lapply/sapply 使用输入索引输出列表

问题描述 投票:0回答:1

如标题所示,如何强制 lapply 或 sapply 使用输入向量值来索引输出。 我有两个案例;让我从更简单的开始。以下代码

lapply(c('a', 'b'), function(idx){
    rnorm(1)
})

给我输出

[[1]]
[1] -1.359386

[[2]]
[1] -0.3428958

但我想收到:

$a
[1] -1.359386

$b
[1] -0.3428958

最终目标,我的代码如下所示:

m = sapply(unique(isotopes[, 1]), function(el){
    sapply(isotopes[isotopes$element == el, 2], function(mnr){
        isotopes[isotopes$element == el & isotopes$mass_nr == mnr, 3]
    })
})

它给了我类似的输出

$Pu
[1] 238.0496 239.0522 240.0538 241.0569 242.0587 244.0642

虽然我想获得列表列表,但能够使用

m['Pu'][240]
m['Pu']['240']
等(对于“Pu”
isotopes[isotopes$element == el, 2]
是 238 239 240 241 242 244 的向量)

PS。当然可以用

m = function(el, mnr){ isotopes[isotopes$element == el & isotopes$mass_nr == mnr, 3] }

但我很感兴趣上述问题是否有一个巧妙的解决方案:)

r list lapply sapply indices
1个回答
0
投票

你可以试试

lapply(c(a = "a", b = "b"), function(idx) {
    rnorm(1)
})

这应该给出所需的输出

$a
[1] 1.556433

$b
[1] -0.2282002
© www.soinside.com 2019 - 2024. All rights reserved.