我正在寻找矩阵每一行的最大包版本(即使用比较函数 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/

10-12 17:11