Forms 得到一个矩阵形式的结果,该矩阵在R中具有mapply
我在两个矩阵上使用Forms 得到一个矩阵形式的结果,该矩阵在R中具有mapply,forms,r,matrix,Forms,R,Matrix,我在两个矩阵上使用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,]
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)}
}
>a=矩阵(c(0,2,0,0,0,1,3,0,3,2,0,3,5,0,4,0,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=矩阵(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
>映射层(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=0){0.0025*(x-y)}其他{-(1-0.0025)*(x-y)}
}
不需要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
l0.0025 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,还必须考虑到它将矩阵视为向量。这就是它不返回矩阵的原因。请提供一个可复制的示例。@Matthew Plourde>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[,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.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=0){0.0025*(x-y)}否则{-(1-0.0025)*(x-y)}你在开玩笑吗?把它放在问题里!