Почему мой for l oop выполняет одну дополнительную итерацию в R? - PullRequest
2 голосов
/ 28 мая 2020

Я пытаюсь запустить следующий простой код в R, но for l oop выполняет одну дополнительную итерацию, и я не могу понять причину этого. Не могли бы вы мне помочь с этим?

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)

Заранее большое спасибо.

Ответы [ 2 ]

2 голосов
/ 28 мая 2020

Один из вариантов - инициализировать 'y' как length из 'x', а затем удалить 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 голосов
/ 28 мая 2020

Для циклов в R выполняются от начала до конца включительно.

for (i in start:end)

Измените его на:

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