【问题标题】:Keep getting an error "attempt to apply non function" when using an if statement [duplicate]使用 if 语句时不断收到错误“尝试应用非函数”[重复]
【发布时间】:2017-02-14 14:51:20
【问题描述】:

从具有值为 P 或 F 的列 State 的给定数据框中,我正在尝试创建另一个列 State1,该列的值为 1 或 0,具体取决于 State 是 P 还是 F。 以下是我写的代码

for(i in 1:nrow(df)){
    if (df$State(i)==P) {df$State1(i)<- 1} 
    else {df$State1(i) <- 0}  
    }

但是我不断收到错误“尝试应用非功能”。我的代码看起来很简单,我不确定为什么会出现非函数错误。 请帮忙 谢谢 KS

【问题讨论】:

  • 试试df$State(1)这行——它会给你什么?
  • 您收到此错误是因为括号用于 R 中的函数。因此语法“df$State(i)”表明 df$State 是您使用参数 i 调用的函数。

标签: r


【解决方案1】:

您的语法不正确。应该是:

for(i in 1:nrow(df)){
    if (df$State[i]=="P") {df$State1[i] <- 1} 
    else {df$State1[i] <- 0}  
}

【讨论】:

    【解决方案2】:

    Frid​​olin Linder 提供了正确的语法。您还可以使用矢量化的 ifelse 函数以更短的命令来完成此操作

    df$State1 <- ifelse(df$State == "P", 1, 0)
    

    【讨论】:

    • 或者只是df$State == "P"应该没问题或者至少as.integer(df$State == "P")
    • 是的,但这是一个不能很好概括的技巧。
    猜你喜欢
    • 1970-01-01
    • 2019-04-05
    • 2019-02-03
    • 2017-04-28
    • 1970-01-01
    • 2019-09-23
    • 1970-01-01
    • 2017-01-14
    • 1970-01-01
    相关资源
    最近更新 更多