【问题标题】:Why for loop does not change element in a numeric vector? [duplicate]为什么 for 循环不会更改数值向量中的元素? [复制]
【发布时间】:2019-05-28 01:26:54
【问题描述】:

数值向量中的元素在运行迭代每个元素的 for 循环后不会改变。

我有一个数字向量:

>str(df$Grad.Rate)
num [1:777] 60 56 54 59 15 55 63 73 80 52 ...

我想更新任何元素>100

> for (i in df$Grad.Rate){
+     if (i >100){
+         print(i)
+         i = 100
+         print(paste0('changed to ', i))
+     }
+ }
[1] 118
[1] "changed to 100"

运行for循环后,>100的元素仍在向量中

> any(df$Grad.Rate>100)
[1] TRUE

为什么?

【问题讨论】:

  • 您只是 printing 并没有更新数据集。您可能需要遍历序列并更新它。但是,这可以在没有循环的情况下轻松完成,df$Grad.Rate[df$Grad.Rate > 100] <- 100df$Grad_Rate <- pmax(100, df$Grad.Rate)

标签: r for-loop vector


【解决方案1】:

你必须使用i = 100而不是

df$Grad.Rate[i] <- 100

在你的循环中。您也可以选择不循环更改元素:

df$Grad.Rate[df$Grad.Rate > 100] <- 100

【讨论】:

    【解决方案2】:

    我们可以在没有任何循环的情况下做到这一点

    df$Grad.Rate[df$Grad.Rate > 100] <- 100
    

    或者

    df$Grad_Rate <- pmin(100, df$Grad.Rate) 
    

    for 循环中,值不会更新。相反,我们可以遍历序列并更新它

    for (i in seq_along(df$Grad.Rate)){
     if (df$Grad.Rate[i] >100){
    
         df$Grad.Rate[i] <- 100
    
      }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多