【问题标题】:R: $ operator invalid for atomic vectors Error with POSIXR:$ 运算符对原子向量无效 POSIX 错误
【发布时间】:2018-08-23 08:11:25
【问题描述】:

我可能在这里遗漏了一些非常明显的东西,你能帮我吗?

当我向 seLocalize() 函数发送一个日期对象时,它会按预期返回我的代码(我在 18 年 3 月 14 日发送并在 18 年 3 月 13 日返回)

seLocalize <- function(dataTeste) {
    data <- as.POSIXlt(dataTeste) 
    if(data$wday != 0) {
        data <- data-86400
    }
    print(data)
}

虽然,为了遵循这段代码,相同的测试返回“错误:$ operator is invalid for atomic vectors”

seLocalize <- function(dataTeste) {
    data <- as.POSIXlt(dataTeste)
    while(data$wday != 0) {
        data <- data-86400
    }
    print(data)
}

为什么?

【问题讨论】:

  • 减法后不是POSIXlt,我猜是class(as.POSIXlt(Sys.Date()) - 1L)
  • 看起来您正在尝试混合两种不同类型的 POSIXt 变量。当您从 POSIXlt 向量中减去一个值时,它会被强制转换为 POSIXct 向量。

标签: r posix posixlt data-objects


【解决方案1】:

我很难相信这是一个正确的问题描述,因为该日期的格式无法识别。

> seLocalize <- function(dataTeste) {
+     data <- as.POSIXlt(dataTeste)
+     while(data$wday != 0) {
+         data <- data-86400
+     }
+     print(data)
+ }
> seLocalize("13-mar-18")
Error in as.POSIXlt.character(dataTeste) : 
  character string is not in a standard unambiguous format

所以我尝试向as.POSIXlt 发送一个我认为可能修改过的函数(对于有些模糊的强制导致的错误)一个正确的日期值:

 seLocalize2 <- function(dataTeste) {
     data <- as.POSIXlt(dataTeste)
     while(data$wday != 0) {
         data <- as.POSIXlt(data-86400)  # coerce back to POSIXlt
         }
     print(data)
     }
> seLocalize2("2018-03-25")
[1] "2018-03-25 PDT"
> seLocalize2("2018-03-29")
[1] "2018-03-25 PDT"

【讨论】:

  • 明白,有道理。非常感谢大家!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-02
  • 1970-01-01
  • 2021-08-20
  • 2020-06-21
  • 2021-11-07
  • 1970-01-01
相关资源
最近更新 更多