函数在R中采用两个矩阵的行,如Map

时间:2016-01-12 08:54:23

标签: r

我有两个矩阵说AB。我想获取AB的相应行并执行一些计算。我尝试了Mapmapply,但没有成功。我可以使用for循环执行此操作,但我想知道R中是否还有其他函数可用于n矩阵的行或列值。

这里我提供两个矩阵

# A<- dput(SAS[1:5,1:3])
A <- structure(c(1, 0.752883144886123, 0.665820582687678, 0.332066199562453, 
0.298438041926883, 1, 0.874502944276854, 0.802056449299557, 0.523826654155693, 
0.464779293591712, 1, 0.987890530841308, 0.906426596434083, 0.825898519791539, 
0.584637768405933), .Dim = c(5L, 3L), .Dimnames = list(NULL, 
    c("4", "5", "6")))
# B<- dput(IND[1:5,1:3])
B <- structure(c(20L, 22L, 21L, 13L, 10L, 20L, 22L, 21L, 13L, 10L, 
20L, 22L, 13L, 21L, 15L), .Dim = c(5L, 3L), .Dimnames = list(
    NULL, c("4", "5", "6")))

更新 假设我想在两个matry的每一行中找到最大的对应元素 我使用了Map,但这不起作用

Map(function(x,y){g1 <- sort(x, decreasing=TRUE)[1] 
                  g2 <- sort(y, decreasing=TRUE)[1]
                 },A,B)

预期产出:

1   |20
0.98|22
0.9 |21
0.8 |21
0.5 |15

1 个答案:

答案 0 :(得分:0)

我们可以尝试

t(mapply(function(x,y) c(max(x), max(y)),
           split(A, row(A)), split(B, row(B))))
#       [,1] [,2]
#1 1.0000000   20
#2 0.9878905   22
#3 0.9064266   21
#4 0.8258985   21
#5 0.5846378   15

或者我们可以使用rowMaxs

中的library(matrixStats)
library(matrixStats)
sapply(list(A,B), rowMaxs)
#          [,1] [,2]
#[1,] 1.0000000   20
#[2,] 0.9878905   22
#[3,] 0.9064266   21
#[4,] 0.8258985   21
#[5,] 0.5846378   15

或使用pmax

中的base R
sapply(list(A,B), function(x) do.call(pmax, as.data.frame(x)))