如标题所示,如何强制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的向量)
附言当然我可以用
m = function(el, mnr){ isotopes[isotopes$element == el & isotopes$mass_nr == mnr, 3] }
但我很感兴趣,如果上述问题拥有一个整洁的解决方案:)
3条答案
按热度按时间2wnc66cl1#
你可以试试
它应该能给予所需的输出
mfpqipee2#
如果你想分割数据集两次,使用
split
两次,它返回一个命名列表。在下面的代码中,我使用了列名
third_col
,而不是列号。创建于2023-09-20使用reprex v2.0.2
或者使用从第一个
split
到lapply/split
的管道。然后提取几个命名列表成员。创建于2023-09-20使用reprex v2.0.2
m3eecexj3#
另一种方法-使用
sapply()
和simplify = FALSE
选项来获得一个列表作为输出:输出量: