使用R的ifelse语句中未使用的参数错误

unused argument error in ifelse statement using R

我正在尝试根据 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")

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

使用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"

    

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