我正在从教科书中练习一个简单的R函数。我已经编写了执行正确操作的函数,但我不明白为什么我会抛出语法错误。我有一个可以正常工作的解决方案,并且两者几乎相同,所以我很好奇我的代码出了什么问题?
这是问题的要求:
写一个问候功能,说“早上好”,“下午好” 或“晚上好”,具体取决于一天中的时间。 (暗示: 使用默认为lubridate :: now()
的时间参数
我的代码:
salutations = function(now()){
hr = hour(now())
if(4<= hr <= 12){
print("Good Morning")
} else if (13 <= hr <= 19){
print("Good Afternoon")
} else {
print("Good Evening")
}
}
解决方案代码:
greet <- function(time = lubridate::now()) {
hr <- lubridate::hour(time)
# I don't know what to do about times after midnight,
# are they evening or morning?
if (hr < 12) {
print("good morning")
} else if (hr < 17) {
print("good afternoon")
} else {
print("good evening")
}
}
一些注意事项:我安装了lubridate
软件包,因此即使我省略了lubridate::
部分,我仍然认为它仍然可以工作。我有相同数量的括号和制表符作为解决方案。那怎么可能出问题了?
首先,在代码末尾有一个额外的'}'。秒(4 <= hr <= 12)不是正确的语法。您可以将其编写为:
(hr >= 4 & hr <= 12)
4<= hr <= 12
不是有效的R语法。
可能是您想做的是:
library(lubridate)
hr = hour(now())
if(4 <= hr & hr <= 12){
print("Good Morning")
} else if (13 <= hr & hr <= 19){
print("Good Afternoon")
} else {
print("Good Evening")
}