2012-12-07 3 views
1

두 행렬에 대해의 함수를 사용하지만 최종 결과는 벡터입니다. SIMPLIFY = TRUE을 사용해 보았는데 성공하지 못했습니다.mapply가있는 행렬 형식으로 결과 얻기 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] 2 3 4 0 [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] 3 7 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 <- function (x, y) {if (xy> = 0) {0.0025 * (x-y)} else {- (1-0.0025) * (x-y)}} – user1627466

+1

농담 해? 질문에 넣어! –

답변

2

mapply은 필요하지 않습니다. 당신은 당신에 의해 원하는 것을 얻을 : 당신은 ifelse()이 조건을 얻기의 벡터화 방법임을 기억해야

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 

것을 벡터화 방식으로 R 작업 연산자. 따라서 루프와 같은 구조가 필요하지 않은 방식으로 계산을 구성 할 수 있습니다.

mapply를 사용하려면 행렬을 벡터로 처리해야한다는 점도 고려해야합니다. 그것이 행렬을 반환하지 않는 이유입니다.