首页 > 解决方案 > 缺少参数“no”,没有默认值

问题描述

我正在尝试使用以下代码运行 ifelse 语句。我将“No Lic”指定为 no 语句,但我仍然收到“没有默认值的参数“no”缺失”并且无法弄清楚原因。

数据:

ELED<-data.frame("ID"=1:6,"UG_Degree_Term"= c(201809,201901,201906,201909,202001,202006),"Test_Date"=c('2019-02-27','2018-10-23','2019-07-09','2019-01-18','2019-04-23','2018-7-12'))
ELED$Test_Date<-anytime(ELED$Test_Date)

代码:

ELED$UVM_Lic_Rec<-with(ELED,
           ifelse(UG_Degree_Term==201809 & Test_Date<=as.POSIXct('2019-12-31'),"2019"),
           ifelse(UG_Degree_Term==201901 & Test_Date<=as.POSIXct('2020-05-30'),"2019"),
           ifelse(UG_Degree_Term==201906 & Test_Date<=as.POSIXct('2020-08-31'),"2019"),
           ifelse(UG_Degree_Term==201909 & Test_Date<=as.POSIXct('2020-12-31'),"2020"),
           ifelse(UG_Degree_Term==202001 & Test_Date<=as.POSIXct('2021-05-30'),"2020"),
           ifelse(UG_Degree_Term==202006 & Test_Date<=as.POSIXct('2021-08-31'),"2020",'No Lic'))

标签: rif-statement

解决方案


ifelse函数通常需要三个参数:

  • test: 条件,
  • yes: 如果条件成立,返回什么,
  • no: 如果条件不成立,返回什么。

您缺少第三个(no参数),并且 R 的错误消息是这样说的(诚然以一种不透明的方式)。

在这里,我用一个更简单的例子重现了这个错误:

> x <- 1
> ifelse(x == 1, "YES")
[1] "YES"
> ifelse(x == 0, "YES")
Error in ifelse(x == 0, "YES") : 
  argument "no" is missing, with no default
> ifelse(x == 0, "YES", "NO")
[1] "NO" 

您的代码的问题是每个ifelse语句的右括号直接出现在yes参数之后。他们需要走到最后,像这样:

ELED$UVM_Lic_Rec<-with(ELED,
       ifelse(UG_Degree_Term==201809 & Test_Date<=as.POSIXct('2019-12-31'),"2019",
       ifelse(UG_Degree_Term==201901 & Test_Date<=as.POSIXct('2020-05-30'),"2019",
       ifelse(UG_Degree_Term==201906 & Test_Date<=as.POSIXct('2020-08-31'),"2019",
       ifelse(UG_Degree_Term==201909 & Test_Date<=as.POSIXct('2020-12-31'),"2020",
       ifelse(UG_Degree_Term==202001 & Test_Date<=as.POSIXct('2021-05-30'),"2020",
       ifelse(UG_Degree_Term==202006 & Test_Date<=as.POSIXct('2021-08-31'),"2020",'No Lic')))))))

推荐阅读