gpt4 book ai didi

r - 使用 mapply 并保持原始列表的结构

转载 作者:行者123 更新时间:2023-12-04 04:49:20 27 4
gpt4 key购买 nike

我有一个列表“temp”,它等于

[[1]]
[1] 8 0 3

[[2]]
[1] 6 4 0

[[3]]
[1] 0 5 0

和一个向量 vec = c(1,2,3,4,5,6,7,8,9) .我想得到一个 list
具有与“temp”相同的结构,其中将包含最大值
对于 temp 和 vec 之间的每个元素。所需的新列表将等于
[[1]]
[1] 8 2 3

[[2]]
[1] 6 5 6

[[3]]
[1] 7 8 9

如果我执行
mapply(max, temp, vec)
我得到
8 6 5 8 6 6 8 8 9

这是错误的结果和错误的结构。

如果我执行
lapply(temp, function(x) mapply(max, unlist(temp), vec))

我得到以下
[[1]]
[1] 8 2 3 6 5 6 7 8 9

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

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

这在某种程度上是错误结构的正确结果。
有没有一种矢量化的方式来获得想要的效果?这很重要
为了这个运行得非常快......

谢谢!!!

最佳答案

temp <- list(c(8,0,3),c(6,4,0),c(0,5,0))
vec <- c(1,2,3,4,5,6,7,8,9)

使用 temp 的尺寸列表,您可以拆分和比较:
Map(pmax, temp, split(vec, rep(seq_along(temp),sapply(temp,length))))

...或比较和拆分:
split( pmax(unlist(temp),vec), rep(seq_along(temp),sapply(temp,length)) )

..或者只是为了表明有一百万种方法可以做所有事情:
split(sweep(do.call(rbind,temp),2:1,vec,FUN="pmax"),1:length(temp))

结果:
[[1]]
[1] 8 2 3

[[2]]
[1] 6 5 6

[[3]]
[1] 7 8 9

关于r - 使用 mapply 并保持原始列表的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17667518/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com