2014-03-13 4 views
1

다음과 같이 I가동시에

# test case 
a<-matrix(rep(c(1,2,3,4,5,6),3),ncol=3) 
b<-t(matrix(c(1,3,4))) 

a 

    [,1] [,2] [,3] 
[1,] 1 1 1 
[2,] 2 2 2 
[3,] 3 3 3 
[4,] 4 4 4 
[5,] 5 5 5 
[6,] 6 6 6 

b 

    [,1] [,2] [,3] 
[1,] 1 3 4 

a의 열에 b "대응"의 각 요소를 가지며, 기능에 필요한 가정 myFun

myfun<-function(x,n) { 
    x[1:n]<-NA 
    x 
} 

나는

을 반환하는 데 사용할
t<-cbind(myfun(a[,1],b[1]), myfun(a[,2],b[2]), myfun(a[,3],b[3])) 

t 
    [,1] [,2] [,3] 
[1,] NA NA NA 
[2,] 2 NA NA 
[3,] 3 NA NA 
[4,] 4 4 NA 
[5,] 5 5 5 
[6,] 6 6 6 

는 어떻게 for 루프를 사용하지 않고 apply/lapply/sapply를 사용하여 위를 달성 할 수 ? 예를 들어

, 그때 전체 b 내가 apply(a,2,FUN=myfun,b) 같은 myfun 있음은 각각에 해당하는 b의 요소를 데리러 다시 쓸 수있는 방법 등 myfun 대신 b[1] 또는 b[2]

에 전달, apply(a,2,FUN=myfun,b) 시도 a의 열?

+2

이'mapply' 또는'지도' – Metrics

+0

감사합니다,'mapply' 내 문제를 해결하고 내가 찾던 무엇을보십시오. 귀하의 의견을 답으로 다시 쓸 수 있다면, 나는 그 답을 SO에서 선택할 수 있습니다. – uday

+0

좋습니다. 답변으로 게시 할 수 있습니다. – Metrics

답변

1

당신은이 작업을 위해 벡터의 부분 집합을 사용할 수 있습니다

(NAcells <- unlist(sapply(seq_along(b), function(i) seq(b[i])+(i-1)*nrow(a)))) 
[1] 1 7 8 9 13 14 15 16 

a[NAcells] <- NA 
a 
    [,1] [,2] [,3] 
[1,] NA NA NA 
[2,] 2 NA NA 
[3,] 3 NA NA 
[4,] 4 4 NA 
[5,] 5 5 5 
[6,] 6 6 6 
+0

매우 멋진 솔루션! 많은 감사. – uday

+0

'b'의 요소가 0 인 경우에만 고장이 발생합니다. – uday

관련 문제