2012-12-07 122 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,您还必须考虑到它将矩阵视为向量。这就是为什么它不返回矩阵。