我正在寻找矩阵每一行的最大包版本(即使用比较函数 compareVersion
而不是通常的 max
)。我可以编写一个简单的递归循环,但我正在寻找一个更优雅的解决方案。我试过 apply
没有成功:
样本数据集:
M=matrix(c("2.7.5","1.7.3","1.7.8","0.9-7","0.9-5","0.10-7"), nrow = 2, ncol = 3, byrow = TRUE)
什么不起作用:
apply(M, 1, FUN = function(e1,e2) ifelse(compareVersion(e1,e2)==1, e1, e2))
是否可以避免对递归循环进行编码?
(也许首先在简单的例子 x=c("2.7.5","1.7.3","1.7.8") 上,然后我可以轻松地将它应用于所有行)
最佳答案
我发现的最好的是使用优秀的函数 Reduce
,它正在做我正在寻找的递归循环
向量上的简单情况:
x = c("1.9-7","4.11-5",NA,"0.10-7")
Reduce(x=x, f=function(e1,e2) ifelse(compareVersion(e1,e2)==1, e1, e2), accumulate=FALSE)
在矩阵上:
M=matrix(c("2.7.5","1.7.3","1.7.8","0.9-7","0.9-5","0.10-7"), nrow = 2, ncol = 3, byrow = TRUE)
apply(M, 1, FUN = function(x) Reduce(x=x, f=function(e1,e2) ifelse(compareVersion(e1,e2)==1, e1, e2), accumulate=FALSE))
关于r - 计算向量的最大版本,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29224589/