Как получить только одну итерацию в операторе ifelse - PullRequest
0 голосов
/ 15 мая 2019

Я пытаюсь передать строку через функцию для вызова столбца из фрейма данных. Я сделал очень простую функцию if-else, чтобы убедиться, что фундамент работает, прежде чем добавлять сложность. По сути, если имя столбца найдено во фрейме данных, выведите «Hi», если нет, выведите «No». Функция правильно определяет, находится ли имя столбца во фрейме данных, но печатает дубликат «Нет».

Я пытался использовать if(){}else(){}

Использование ifelse()

Использование break и next с методом if () {} else () {}

df <- as.data.frame(cbind("a" = 1:5,
                    "b" = 6:10))

testingIf <- function(x){
  if(x %in% colnames(df)){
    print("Hi")
  }
  else{
    (print("No"))
  }
}
testingIf("a")
testingIf("This is true")

if(){}else(){} -Это была моя первоначальная попытка, и если «если» истинно, то работает как задумано, но если «если» ложно, то печатается [1] Нет [1] Нет.

Использование ifelse() -Печать [1] Привет [1] Привет когда истина и [1] Нет [1] Нет при ложь

Использование break и next с синтаксисом if(){}else(){} -Это работает, поскольку это дает мне правильный вывод, но я получаю

«Ошибка: нет цикла для перерыва / следующего перехода на верхний уровень»

, что заставляет меня чувствовать, что я что-то упускаю.

1 Ответ

0 голосов
/ 15 мая 2019

Ваша функция может быть упрощена с помощью функции ifelse().

Используя ваш фрейм данных df <- as.data.frame(cbind("a" = 1:5,"b" = 6:10)), мы можем переписать вашу функцию как:

testingIf <- function(x,dt){
    ifelse(x %in% colnames(dt),"Hi","No")
}

Сейчас тестируем код, имеем:

> testingIf("a",df)
[1] "Hi"
> testingIf("This is true",df)
[1] "No"

Надеюсь, это поможет!

...