【问题标题】:Error with if statement when runnin R in jupyter在 jupyter 中运行 R 时 if 语句出错
【发布时间】:2019-06-20 08:09:30
【问题描述】:

我在 R 中运行以下 if 条件没有任何问题:

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_inputS2_inputS1_S2_input 是逻辑变量(TRUE / FALSE)(只有一个可以是TRUE,其余是FALSE),bands 只是一个字符串变量

我正在尝试使用 Jupiter Notebook 共享我的代码,但同一行出现错误,但仅当 S1_inputFALSE 时才出现错误

S2_input & nchar(bands) > 40 中的错误:只能对数字、逻辑或复杂类型进行操作

追溯:

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

【问题讨论】:

  • 这可能不相关,但我注意到您混合并匹配 & 和 &&,它们是混合向量和标量。这是故意的吗?
  • 好点,这是我之前的测试中的一个错字。我已经在问题中更改了它

标签: r if-statement jupyter-notebook conditional-statements


【解决方案1】:

对于那些对未来感兴趣的人,我的问题是我使用readline() 函数来获取用户输入。 (在 RStudio 中运行时,它们是布尔变量 T/F)。用户写的是 TRUE,但根据我的情况,这不被视为布尔值。解决方案是明确写ifelse(S2_input=="TRUE"...

另一个选项,使用as.logical(readlines("")) 确保用户输入被视为布尔值、数字(as.numeric)等。

希望对你有帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多