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

R 使用mapply并保持原始列表的结构,r,vectorization,R,Vectorization,我有一个列表“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)。我想要一份清单 具有与“temp”相同的结构,其中将包含最大 对于temp和vec之间的每个元素。所需的新列表将等于 [[1]] [1] 8 2 3 [[2]] [1] 6 5 6 [[3]] [1] 7 8 9 如果我执行 mapply(最大、温度、向量) 我明白了 这是错误的结果和错误的结构

我有一个列表“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)
。我想要一份清单 具有与“temp”相同的结构,其中将包含最大 对于temp和vec之间的每个元素。所需的新列表将等于

[[1]]
[1] 8 2 3

[[2]]
[1] 6 5 6

[[3]]
[1] 7 8 9 
如果我执行

mapply(最大、温度、向量)

我明白了

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

如果我执行

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)
…或比较和拆分:

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

“temp和vec之间每个元素的最大值”是什么意思?分割mapply的结果会给出错误的列表名称,但除此之外是正确的结构:
split(mapply(max,unlist(temp),vec),rep(seq_-along(temp),sapply(temp,length))
有没有其他方法使用split以外的内容?e、 g.计算向量1:12乘以4的平均值,得到(2.5,6.5,10.5),而不使用拆分。。。更快的东西..@conighion-类似
x的东西
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