2014-12-05 64 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