【问题标题】:Encountering an error while calling a non built-in function in R在 R 中调用非内置函数时遇到错误
【发布时间】:2022-02-10 02:55:48
【问题描述】:

我在 R 中创建了一个函数,它基本上根据指定的日期从我的数据框的列中获取某些值并返回它们的总和:

 <<>>=
    dmon.function = function(y, m, d){
      result = sum(dmystatedf$Deceased[Dategood>="y-m-01" & Dategood<="y-m-d"])
    }
    dmon.function(2021, 04, 03)
    @

现在当我传递函数时,我没有收到任何错误,但是当我调用该函数时,我收到了这个错误:

> dmon.function(2021, 04, 03)
 Error in charToDate(x) : 
character string is not in a standard unambiguous format

如何解决此错误?如何制作带有参数的函数并将它们用作日期、月份或年份?

编辑 1:这是我正在使用的数据的前几行:

> head(dmystatedf[c("Deceased", "Dategood")])
    Deceased   Dategood
61         0 2020-03-09
74         0 2020-03-10
87         0 2020-03-11
101        0 2020-03-12
115        1 2020-03-13
130        1 2020-03-14

这是 Rui Barradas 在 cmets 中要求的代码 dput(head(dmystatedf[c("Deceased", "Dategood")])) 的输出:

> dput(head(dmystatedf[c("Deceased", "Dategood")]))
structure(list(Deceased = c(0L, 0L, 0L, 0L, 1L, 1L), Dategood = structure(18330:18335, class = "Date")), row.names = c(61L, 
74L, 87L, 101L, 115L, 130L), class = "data.frame")

谢谢

【问题讨论】:

  • @RuiBarradas 抱歉,刚刚发现并进行了编辑。但现在我遇到了另一个错误,需要帮助。
  • 请发布数据示例。请用dput(head(dmystatedf[c("Deceased", "Dategood")])) 的输出编辑问题。
  • @RuiBarradas 已编辑。我打算对我的函数做的是,我希望它接受三个整数 a、b、g 作为参数,并给出应用于从日期“a-b-01”到“a-b-g”的数据的 sum 函数的输出。我使用的函数格式是否正确?如果不是,那么正确的格式是什么?
  • 您将 Date 对象与"y-m-01" 之类的字符串进行比较。 R 不会自动将变量 ym 替换到字符串中。您需要以其他方式计算比较日期。
  • @user2554330 我使用了 lubridate 包并将函数的参数保留为标准日期格式的字符串。它有效,但它显着增加了调用该函数后我必须做的工作量。无论如何,谢谢。

标签: r function date error-handling


【解决方案1】:

您不需要贡献的包,仅基础 R 就足以解决问题。
基函数ISOdate 接受yearmonthday 并返回一个类"POSIXt" "POSIXct" 的对象。然后与"Date" 类的列的比较会给出警告,所以用as.Date 强制开始和结束日期。

dmon.function <- function(y, m, d){
  start <- as.Date(ISOdate(y, m, 1))
  end <- as.Date(ISOdate(y, m, d))
  sum(dmystatedf$Deceased[dmystatedf$Dategood >= start & dmystatedf$Dategood <= end])
}

dmon.function(2021, 04, 03)
#> [1] 0

reprex package (v2.0.1) 于 2022-02-09 创建

【讨论】:

    猜你喜欢
    • 2021-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-27
    • 2021-03-17
    • 2019-07-18
    • 1970-01-01
    • 2018-11-06
    相关资源
    最近更新 更多