【问题标题】:unused argument error in ifelse statement using R使用 R 的 ifelse 语句中未使用的参数错误
【发布时间】:2021-03-03 08:14:49
【问题描述】:

我正在尝试基于 ifelse 语句创建一个新的数据框。我正在检查 1 个数据框以查看字段是否包含字符串。如果是这样,那么我想使用过滤器、子集和 rbind 方法将该数据帧中的行添加到另一个数据帧:

这行得通:

  #Check to see if field contains string. 
  timeline.data.2 <-ifelse(grepl(1043-1, prescription.data$case_id), 
                                timeline.data <- timeline.data %>%
                                  filter(case_id==1043-1),          

                                "do nothing")

这不是:

  #Check to see if field contains string. 
  timeline.data.2 <-ifelse(grepl(1043-1, prescription.data$case_id), 
                                timeline.data <- timeline.data %>%
                                  filter(case_id==1043-1),
                                timeline.data <-subset(timeline.data, select = c(event,group,start,end,color,tooltip)),
                                timeline.data <- subset(prescription.data, select = c(event,group,start,end,color,tooltip)),
                                timeline.data <- rbind(timeline.data, prescription.data),
                                "do nothing")

我收到了错误:

Error in ifelse(grepl(1043 - 1, prescription.data$case_id), timeline.data <- timeline.data %>%  : 
unused argument ("do nothing")

谁能告诉我我在这里做错了什么?非常感谢。

【问题讨论】:

  • 作业(`timeline.data ) would not work inside ifelse`
  • 我试过了,但仍然没有运气。即子集(timeline.data,select = c(事件,组,开始,结束,颜色,工具提示))
  • 另外,你的“是”是一个 data.fframe 而不是一个向量
  • 如果条件满足,我只想运行subset/filter/cbind等想法?
  • 您在检查any 元素吗?

标签: r if-statement subset rbind


【解决方案1】:

ifelse 正好接受三个参数。你似乎提供... 6?我想?这就是“未使用的参数”的意思:你给了它太多的参数。这就是您的 first 示例有效的原因,只有三个参数。

您使用ifelse 在运行向量时在值之间进行选择。它适用于更换 NA 等简单的工作:ifelse(is.na(my_data), 'bad value', my_data)

在您明确了 ifelse 的用途后,indent and line-break your code properly。然后您将能够解释什么是参数,什么不是参数,这样的错误消息会更有意义。

如果我通过styler 运行您的代码,它会这样打印:

# Check to see if field contains string.
timeline.data.2 <- ifelse(grepl(1043 - 1, prescription.data$case_id),
  timeline.data <- timeline.data %>%
    filter(case_id == 1043 - 1),
  timeline.data <- subset(timeline.data, select = c(event, group, start, end, color, tooltip)),
  timeline.data <- subset(prescription.data, select = c(event, group, start, end, color, tooltip)),
  timeline.data <- rbind(timeline.data, prescription.data),
  "do nothing"
)

现在更容易看到所有这些行,以逗号结尾,进入ifelse

【讨论】:

    【解决方案2】:

    使用if/else可能会更好

    library(dplyr)
    if(any(grepl("1043-1", prescription.data$case_id))) {
    
        timeline.data <- timeline.data %>%
                            filter(grepl("1043-1", case_id))
    
     } else "do nothing"
    
        
    

    【讨论】:

    • 谢谢。这里的“任何”是什么意思?
    • @DiamondJoe12 我使用了any,因为if/else 需要一个 TRUE/FALSE 作为输入。因此,如果有任何值 '1043-1',则要求过滤行
    猜你喜欢
    • 1970-01-01
    • 2016-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-23
    • 1970-01-01
    • 2020-10-31
    相关资源
    最近更新 更多