【问题标题】:Treating a variable as vector将变量视为向量
【发布时间】:2014-12-05 21:58:14
【问题描述】:
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 是一个向量,它将采用所有满足条件的值。

【问题讨论】:

  • 请显示您的示例的预期输出。
  • @Roland 也就是说,L 将采用那些“rep”数组在行中具有索引 1 的值,即 L=c(180,169,171,165,166,170,167,163,160)

标签: r vectorization


【解决方案1】:

这是基于您的循环的解决方案:

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

【讨论】:

  • 为什么要搞得这么复杂? as.vector(t(rep[1,,])) 是最有效的解决方案。
  • @Roland:我假设if 语句中的条件出现在这里是有原因的,可能是为了让代码在更大维度的数据集上工作。
  • 是的,你是对的@VincentGuillemot。我需要因子设计中混杂处理组合的条件。
猜你喜欢
  • 1970-01-01
  • 2014-06-08
  • 1970-01-01
  • 2012-10-19
  • 1970-01-01
  • 2019-08-10
  • 2019-11-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多