计算向量上的最大版本

时间:2015-03-24 03:34:06

标签: r max apply

我正在寻找矩阵每行的最大包版本(即使用比较函数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”),然后我可以轻松地将它应用于所有行)

2 个答案:

答案 0 :(得分:4)

我发现最好的是使用优秀的函数Reduce,这正是我正在寻找的递归循环

  

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))

答案 1 :(得分:-2)

使用多变量版本mapply

mapply(function(e1,e2) ifelse(compareVersion(e1,e2)==1, e1, e2), e1=M[1,],e2=M[2,])