【问题标题】:for loop with unequal variables具有不相等变量的 for 循环
【发布时间】:2011-10-23 02:46:09
【问题描述】:

我有 2 个不同长度的变量。我想创建一个只计算两个相等值的总和的 for 循环。如果值不相等,则变量 b 必须更新为 +1。有没有办法创建这个?我认为是这样的:

a <- c(1,2,3,4,5)
b<- c(1,7,2,3,6,4,5)

j <- 1
test<- matrix()
for( i in 1:length(a)) {
if(a[i] == b[j]){
result <- a[i] + b[j] 
test[[i]]<-matrix(result)
j <- j + 1}
else {
j <- j +1
}

1 + 1 = TRUE
2 + 7 + FALSE +1
2 + 2 = TRUE
3 + 3 = TRUE 
4 + 6 = FALSE +1
4 + 4 = TRUE
5 + 5 = TRUE

谢谢大家!

【问题讨论】:

  • 我不太明白。有了这些数据,并且考虑到每个 a 都包含在 b 中,为什么不直接做a*2
  • @Joris,这是我真实数据的简单版本。在真正的循环中我不使用 sum 方法!
  • 是这样想的。但是你应该在你的问题中说明这一点。除此之外,请注意我对已接受答案的评论。在某些情况下,接受的答案可能会给出错误的解决方案。此外,当 a 包含重复值时,答案中给出的代码是错误的。

标签: r variables for-loop if-statement


【解决方案1】:

我认为这是这个变量的正确解决方案。唯一的要求是来自变量 a 的所有值都需要在变量 b 中证明。

a <- c(1,2,3,4,5)  
b<- c(1,7,2,3,6,4,5)  

match(a,b)

test <- matrix()
for(i in 1:length(a)){      
if (a[i] == b[i]) {          
result <- a[i] + b[i]           
test[i]<- result          
}
else {
c<- which(b == a[i])
result <- a[i] + b[c]           
test[i]<- result          
}    
} 

【讨论】:

    【解决方案2】:

    不完全确定您要做什么,但这是如何工作的?

    a <- c(1,2,3,4,5) 
    b<- c(1,7,2,3,6,4,5)
    
    test<- matrix()
      for( i in 1:length(a)) {
        for (j in 1:length(b)){
          if (a[i] == b[j]) {
             result <- a[i] + b[j] 
             test[i]<- result
             break()
           }
         }
       }
    
     > test
     [1]  2  4  6  8 10
    

    【讨论】:

    • 使用test &lt;-numeric(length(a))。预定义长度会大大提高速度。
    • 这在a &lt;- c(1,2,3,5,4) ; b &lt;- c(1,2,3,4,5) 时不起作用。结果应该是 2,4,6,10 而不是 2,4,6,10,8 。在break() 之前添加x&lt;-1before testx <- j。循环 for(j in x:length(b)) 而不是 1:length(b)
    【解决方案3】:

    我认为您需要更清楚地定义您的期望。如果您想要的只是将 'b' 中出现的 'a' 的值加倍(因为将两个相等的事物相加是其中之一的两倍), 那么你所需要的就是 双重

    j=1
    
    for (i in 1:length(a)){
    
    if (length(which(a[i]==b)) >0 ) {doubs[j]=2*a[i];j<-j+1}
    
    }
    

    但是:您只想存储第一个匹配项还是所有匹配项? 例如。 a = 1 和 b = c(1,2,1,3,1)。 而且你需要阅读 "==" 与 is.equal 的区别,否则有一天你会后悔的。

    【讨论】:

      猜你喜欢
      • 2015-10-30
      • 1970-01-01
      • 2018-03-28
      • 2020-12-03
      • 1970-01-01
      • 2012-11-27
      • 1970-01-01
      • 1970-01-01
      • 2014-12-14
      相关资源
      最近更新 更多