1

私は 2 つの行列で私の関数を使用mapplyしますが、最終結果はベクトルです。私はSIMPLIFY = TRUE成功せずに使用しようとしました。

構造化せずに結果を行列の形で取得する方法はありますか?

前もって感謝します。

> a=matrix(c(0,2, 0, 0, 1, 3, 0, 3, 2, 0, 3, 5, 0, 4, 0, 0),ncol=4)
> a
 [,1] [,2] [,3] [,4]
[1,]    0    1    2    0
[2,]    2    3    0    4
[3,]    0    0    3    0
[4,]    0    3    5    0


> ab=matrix(c(4,2, 0, 7, 1, 4, 5, 3, 2, 6, 3, 7, 1, 2, 1, 2),ncol=4)
> ab
 [,1] [,2] [,3] [,4]
[1,]    4    1    2    1
[2,]    2    4    6    2
[3,]    0    5    3    1
[4,]    7    3    7    2
> mapply(l0.0025,a,ab)
 [1] 3.9900 0.0000 0.0000 6.9825 0.0000 0.9975 4.9875 0.0000 
 [9] 0.0000 5.9850 0.0000 1.9950 0.9975 0.0050 0.9975 1.9950
l0.0025 <- function(x, y) { 
      if (x-y >= 0) {0.0025*(x-y)} else {-(1-0.0025)*(x-y)} 
}
4

1 に答える 1

2

の必要はありませんmapply。あなたはあなたが望むものを手に入れます:

l0.0025 <- function(x,y){
    tmp <- x-y
    tmp * ifelse(tmp>0,0.0025,-0.9975)        
}
> l0.0025(a,ab)
       [,1]   [,2]  [,3]   [,4]
[1,] 3.9900 0.0000 0.000 0.9975
[2,] 0.0000 0.9975 5.985 0.0050
[3,] 0.0000 4.9875 0.000 0.9975
[4,] 6.9825 0.0000 1.995 1.9950

ifelse()これは条件を取得するベクトル化された方法であり、R の演算子はベクトル化された方法で機能することを覚えておく必要があります。したがって、ループのような構造を必要としないような方法で計算を構築できます。

mapply を使用する場合は、行列をベクトルとして扱うことも考慮する必要があります。そのため、行列は返されません。

于 2012-12-07T16:14:07.313 に答える