我有两个矩阵说A
和B
。我想获取A
和B
的相应行并执行一些计算。我尝试了Map
和mapply
,但没有成功。我可以使用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
答案 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)))