2014-12-05 72 views
1
v=c(96,94,101,84,99,106,85,98,98,85,95,108,84,98,114,86,97,109,84,95,105,83,97, 
    100,81,93,102) 

rep1=array(v,dim=c(3,3,3)) 

u=c(84,95,105,85,97,104,86,90,103,80,93,110,82,99,102,84,95,100,83,92,102,80,96, 
    111,79,93,108) 

rep2=array(u,dim=c(3,3,3)) 

rep=rep1+rep2 

f=function(x1,x2,x3){ 
    l=x1 
    return(l) 

}治療變量作爲矢量

for(i in 1:3){ 
    for(j in 1:3){ 
    for(k in 1:3){ 
    if(f(i,j,k)%%3==1)L=rep[i,j,k] 
    } 
    } 
} 

這裏L被服用的最後一個值的量,條件得到滿足。但我希望L將成爲一個能夠滿足條件的所有值的向量。

+0

請出示你的榜樣的預期輸出。 – Roland 2014-12-05 13:31:43

+0

@Roland也就是說,L將採用那些「rep」數組中有索引1的值,即L = c(180,169,171,165,166,170,167,163,160) – 2014-12-05 13:45:37

回答

3

這是基於你的循環的解決方案:

L <- c() 
for(i in 1:3){ 
    for(j in 1:3){ 
    for(k in 1:3){ 
     if(f(i,j,k)%%3==1) L <- c(L, rep[i,j,k]) 
    } 
    } 
} 
# [1] 180 165 167 169 166 163 171 170 160 

這裏是另一個更深奧的一個:

as.vector(t(rep[ (1:3) %% 3 == 1,,])) 
# [1] 180 165 167 169 166 163 171 170 160 
+0

謝謝你,非常感謝你,非常感謝。 – 2014-12-05 13:49:23

+1

你爲什麼這麼複雜? 'as.vector(t(rep [1 ,,]))'是最有效的解決方案。 – Roland 2014-12-05 13:55:41

+0

@Roland awesome – 2014-12-05 14:11:04