我正在制作一个输出星期几的功能,给出自1970年1月1日以来的一些天.当函数是一个if then
语句链时,函数工作正常,但我想在向量上使用函数,所以我需要构建这个看起来很愚蠢的ifelse
语句链.
不幸的是,我一直收到这个错误:
Error in ifelse(rem == 0, day = "Thursday", ifelse(rem == 1, day = "Friday", :
unused argument(s) (day = "Thursday")
Calls: dayFinder -> ifelse
Execution halted
Run Code Online (Sandbox Code Playgroud)
我一直无法弄清楚如何绕过它 - 看起来它只是忽略then
了ifelse
声明的一部分.我已尝试向其提供各种样本数据集或数据点,但无法修复错误.
这是我的代码 - 提前谢谢.
dayFinder <- function(x){
#Assuming that '0' refers to January 1 1970
#Store given number
start <- x
#Initialize variable
day="Halloween"
#Divide x by 7 and store remainder
rem <- x%%7
#Determine the day
ifelse(rem==0, day="Thursday",
ifelse (rem==1, day="Friday",
ifelse (rem==2, day="Saturday",
ifelse (rem==3, day="Sunday",
ifelse (rem==4, day="Monday",
ifelse(rem==5, day="Tuesday",
if (rem==6)
{
day="Wednesday"
}))))))
return(day)
}
q = seq(7,50,1)
z = dayFinder(q)
z
Run Code Online (Sandbox Code Playgroud)
ifelse
链条有一些问题,但我想首先提一种以更易读的方式编写这种选择器的方法.
days.of.week <- c("Thursday", "Friday", "Saturday", "Sunday", "Monday", "Tuesday", "Wednesday")
x <- 21 # some value
day <- days.of.week[(x%%7) + 1]
day
[1] "Thursday"
Run Code Online (Sandbox Code Playgroud)
现在......关于使用ifelse
和unused argument error
...
首先,请记住ifelse()是一个函数,因此当你编写一个类似的语句时
... ifelse(rem == 0, day="Thursday, ...
,R将解释该day="..."
部分,就好像你将命名参数 传递day
给函数一样.
此外,一般来说,你应该避免使用=
[大部分时间],你可能意味着使用<-
.
无论如何,纠正ifelse链应该看起来像'喜欢
rem <- 21%%7
day <- ifelse(rem==0, "Thursday",
ifelse (rem==1, "Friday",
ifelse (rem==2, "Saturday",
ifelse (rem==3, "Sunday",
ifelse (rem==4, "Monday",
ifelse(rem==5, "Tuesday", "Wednesday")
)
)
)
)
)
Run Code Online (Sandbox Code Playgroud)
小智 8
有比使用嵌套 if else 语句更好的条件重新编码方法。使用dplyr::case_when。它会真正改变你的生活。下面是带有 case_when 的代码的样子,干净多了:
day <- case_when(
rem==0 ~ "Thursday",
rem==1 ~ "Friday",
rem==2 ~ "Saturday",
rem==3 ~ "Sunday",
rem==4 ~ "Monday",
rem==5 ~ "Tuesday",
rem==6 ~ "Wednesday"
)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9276 次 |
最近记录: |