2012-12-07 167 views
1

我使用mapply與我的兩個矩陣的功能,但最終的結果是一個向量。我試過使用SIMPLIFY = TRUE沒有成功。獲得一個矩陣的形式在R中的一個矩陣的形式

有沒有辦法讓我的結果以矩陣的形式得到,而不必構造?

在此先感謝。

> 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)} 
} 
+3

請提供一個可重現的例子。 –

+0

@Matthew Plourde >一個 [1] [2] [3] [,4] [1,] 0 1 2 0 [2,1] 2 3 0 4 [3,] 0 0 3 0 [4,] 0 3 5 0 > AB [1] [2] [3] [,4] [1,] 4 1 2 1 [2,1] 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 0.0000 5.9850 0.0000 1.9950 0.9975 0.0050 0.9975 1.9950 與l0.0025 < - 函數(x,y){if(xy> = 0){0.0025 *(x-y)} else { - (1-0.0025)*(x-y)}} – user1627466

+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,您還必須考慮到它將矩陣視爲向量。這就是爲什麼它不返回矩陣。