Ошибка с оператором if при запуске R в Jupyter - PullRequest
0 голосов
/ 20 июня 2019

Я без проблем запускаю следующее if условие в R:

nrow<-ifelse(S1_input, 1, ifelse(S2_input & nchar(bands)>40, 2, ifelse(S1_S2_input & nchar(bands)>40, 3, ifelse (S2_input & nchar(bands)<40, 4, 5))))

Где S1_input, S2_input, S1_S2_input - логические переменные (ИСТИНА / ЛОЖЬ) (только однаможет быть TRUE, остальные FALSE) и bands это просто строковая переменная

Я пытаюсь поделиться своим кодом с помощью блокнота Юпитера, и эта же строка выдает ошибку, но ТОЛЬКО когда S1_input is FALSE

Ошибка в S2_input & nchar (диапазонах)> 40: операции возможны только для числовых, логических или сложных типов

Трассировка:

  1. ifelse (S1_input, 1, ifelse (S2_input & nchar (диапазоны)> 40, 2,
    ifelse (S1_S2_input &
    . Nchar (диапазоны)> 40, 3, ifelse (S2_input && nchar (диапазоны)) <40, <br>. 4, 5))))
  2. ifelse (S2_input & nchar (диапазоны)> 40, 2, ifelse (S1_S2_input &
    . Nchar (диапазоны)> 40, 3, ifelse (S2_input && nchar (band) <40, <br>. 4, 5)))

1 Ответ

0 голосов
/ 20 июня 2019

Для тех, кто интересуется будущим, моя проблема в том, что я использовал функцию readline() для получения пользовательского ввода. (при работе в RStudio они были логическими переменными T / F). Пользователи писали ИСТИНА, но это не воспринимается как логическое по моему состоянию. Решение состояло в том, чтобы явно написать ifelse(S2_input=="TRUE" ...

Другой вариант, используйте as.logical(readlines("")), чтобы убедиться, что пользовательский ввод воспринимается как логический, числовой (as.numeric) и т. Д.

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

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