R语言多向量逐元素取最大值及do.call调用pmax报错解决
R语言列表存储多向量逐元素取最大值报错解决
复现场景
需要对列表中存储的多个等长向量按位置逐元素取最大值,测试数据代码如下:
v1<-c(1,1,3,5,10) v2<-c(10,2,1,1,5) v3<-c(11,4,2,1,9) list_of_vectors <- list(v1, v2, v3)
预期输出结果:
> c(11,4,3,5,10) [1] 11 4 3 5 10
尝试使用pmax配合do.call实现时,编写的代码运行报错:
do.call(pmax, list_of_vectors, na.rm=TRUE)
报错原因
do.call的语法为do.call(what, args, quote = FALSE, envir = parent.frame()),只有第二个位置传入的列表内容会被拆分后作为参数传给what指定的函数。你写的na.rm=TRUE被放在了do.call的第三个参数位,会被识别为do.call自身的参数,而do.call没有na.rm这个参数,因此触发报错。
正确写法
将na.rm=TRUE合并到传给pmax的参数列表中即可,修正后代码:
do.call(pmax, c(list_of_vectors, na.rm = TRUE))
运行后直接得到预期结果:
[1] 11 4 3 5 10
其他可选实现方式
也可以用Reduce迭代调用pmax实现相同效果,适合习惯函数式编程写法的场景:
Reduce(function(a, b) pmax(a, b, na.rm = TRUE), list_of_vectors)
内容的提问来源于stack exchange,提问作者msening
相关产品推荐
相关产品推荐

