【问题标题】:Elusive syntactical error in simple R code简单 R 代码中难以捉摸的语法错误
【发布时间】:2020-05-10 02:23:38
【问题描述】:

我正在研究一个简单的 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:: 部分,我觉得它仍然可以工作。我有与解决方案相同数量的大括号和标签。那么有什么问题呢?

【问题讨论】:

    标签: r syntax


    【解决方案1】:

    首先,您的代码末尾有一个额外的“}”。第二 (4

    (hr >= 4 & hr <= 12)
    

    【讨论】:

    • 额外的大括号在哪里?当我滚动浏览它们时,它们都匹配。至于区间,我原来的想法是用hr %in% [4:12]
    • 你有 3 个 {s 和 4 个 }s。
    • 那么你唯一的问题是你如何格式化条件。您使用无效语法将两个条件包含在一个条件中。您需要将其拆分并使用 and (&)。
    • 如果我明白你在说什么,那么第二个条件:hr %in% 13:19 是我的问题所在?
    • (4
    【解决方案2】:

    4&lt;= hr &lt;= 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")
    }
    

    【讨论】:

    • 对于区间,我最初的想法是使用hr %in% [4:12]
    • 是的,您也可以使用它。 if(hr %in% 4:12)
    猜你喜欢
    • 1970-01-01
    • 2011-10-07
    • 1970-01-01
    • 2011-07-02
    • 1970-01-01
    • 1970-01-01
    • 2012-07-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多