Что делать, если функция which не находит значения? - PullRequest
0 голосов
/ 21 февраля 2019

error message Я получаю эту ошибку, когда функция не может найти значение.Я хочу, чтобы он просто возвращал значение, указывающее, что ничего не найдено.Как бы я это сделал?Также я хотел бы использовать цикл for для повторения каждой переменной в кадре данных, как бы я посмотрел на каждый столбец в кадре данных по отдельности?Мне просто нужно знать, как вызывать столбцы или строки матрицы, я хорошо разбираюсь в циклах - я программировал годами, немного новичок в r.Спасибо!

Day1 = c("S", "Be", "N", "S", "St")
Day2 = c("S", "S", "M", "Ta", "Sa")
Day3 = c("S", "Ba", "E", "Te", "U")
Day4 = c("V")

Week = data.frame(Day1, Day2, Day3, Day4)
print(Week)

n = which(Week$Day4 == "S")

if (n[1] == 1) {
  print("true")
} else {
  print("false")
}

1 Ответ

0 голосов
/ 21 февраля 2019

Выход функции which() является вектором, поэтому, если для функции which() не найдено значение integer(0), поэтому я рекомендую вместо того, чтобы в вашем if утверждении n[1] == 1 изменить его на if( length(n) > 0 ) это означает, что в данном столбце есть совпадение.

На ваш второй вопрос простым способом является использование индекса data.frames для итерации по столбцам

n_columns <- ncol(Week) 

# this will iterate through all the columns.
for( i in 1:n_columns ){
 idx <- which(Week[ , i] == "S")
}

Очевидно,это обновит значение idx в каждом для итерации, поэтому вы хотите сохранить выходные данные True, False в векторе, если сохраняете распечатки 'true' / 'false'.

В коде скобкиозначает Week[ rows , columns] если нет ввода, как в моем примере Week[ , i ], это означает, что вы хотите получить все строки для столбца I.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...