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



我正在尝试基于ifelse语句创建一个新的数据帧。我正在检查1个数据帧,以查看字段是否包含字符串。如果是这样,我想使用filter、subset和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")

我在这里做错了什么?

ifelse正好接受三个参数。你似乎在提供。。。6.我想?这就是";未使用的参数";意思是:你给了它太多的论据。这就是为什么第一个示例有效,只有三个参数。

向下运行矢量时,可以使用ifelse在值之间进行选择。它适用于像替换NA:ifelse(is.na(my_data), 'bad value', my_data)这样的简单工作。

在明确使用ifelse的目的后,正确缩进和换行代码。然后,您将能够解释什么是争论,什么不是争论,这样的错误消息将更有意义。

如果我通过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

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

最新更新