【问题标题】:Why my for loop is running one extra iteration in R?为什么我的 for 循环在 R 中运行了一次额外的迭代?
【发布时间】:2020-09-16 04:31:30
【问题描述】:

我正在尝试在 R 中运行以下简单代码,但 for 循环运行了一次额外的迭代,我无法找出其背后的原因。你能帮我解决这个问题吗?

fun <- function(x) { 
  y <- as.character(0)
  for (i in 1:length(x)) {
    if (x[i] == "NO") {
      y[i] <- c("Its a NO")
      y <- append(y, y[i])
    } else if (x[i] == "YES") {
      y[i] <- c("Its a YES")
      y <- append(y, y[i])
    } else {
      y[i] <- c("Don't know")
      y <- append(y, y[i])      
    }    
  }
  return(y)
}

a <- c("YES","NA", "NO")

fun(a)

非常感谢。

【问题讨论】:

    标签: r for-loop if-statement iteration


    【解决方案1】:

    一种选择是将“y”初始化为“x”的length,然后删除append

    fun <- function(x) { 
      y <- character(length(x))
      for (i in seq_along(x)) {
        y[i] <- if (x[i] == "NO") {
          c("Its a NO")  
        } else if (x[i] == "YES") {
          c("Its a YES")        
        } else {
          c("Don't know")
        }
      }
      return(y)
    }
    
    a <- c("YES","NA", "NO")
    
    fun(a)
    #[1] "Its a YES"  "Don't know" "Its a NO" 
    

    【讨论】:

      【解决方案2】:

      R 中的 For 循环从头到尾运行。

      for (i in start:end)
      

      改成:

      for (i in 1:(length(x)-1)) {
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-10-13
        • 1970-01-01
        • 2010-11-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多