为什么R的复制将日期转换成数字?

时间:2019-02-19 15:13:35

标签: python r

我正在尝试使用Python Faker库中的一些功能在R中创建小标题。除日期外,其他所有方法都工作正常,日期已由replicate()转换为整数。

下面的可复制示例,其中一个示例可以正常运行,而无需在底部重复。

我认为这是因为replicate()sapply()simplify = "array"的包装,但是,使用复制副本不会改变结果(例如replicate2 <- function(n, expr) sapply(intenger(n), eval.parent(substitute(function(...) expr)))

library(tidyverse); library(reticulate)

# Python Faker library
faker <- import("faker")
fake <- faker$Faker()

make_df <- function(N){ 
  txns <- tibble(
    date_time = replicate(5, fake$date_time_between(start_date = "-1y", 
                                                    end_date = "now") %>% 
                            str_extract("[0-9-]*") %>% lubridate::parse_date_time("Ymd"))
  )

  return(txns)
}

make_df(5)
#> # A tibble: 5 x 1
#>    date_time
#>        <dbl>
#> 1 1545177600
#> 2 1546473600
#> 3 1537833600
#> 4 1547596800
#> 5 1531008000


fake$date_time_between(start_date = "-1y", end_date = "now") %>% 
  str_extract("[0-9-]*") %>% lubridate::parse_date_time("Ymd")
#> [1] "2018-07-25 UTC"

reprex package(v0.2.1)于2019-02-19创建

2 个答案:

答案 0 :(得分:0)

R按日期分类的向量是具有“日期”类和各种通用函数的整数,这些函数尊重该类以产生用户期望此类对象产生的行为。 R数组无法保存具有属性的对象,因此强制执行数组操作将使未分类的对象暴露其底层存储类。

storage.mode( as.Date("1970-01-01"))
[1] "double"

看看

的输出
 print.Date
 '+.Date'
 diff.Date

最后获取任何数据对象并执行以下操作:

 dput(object) 

再看看:

  sapply

您的那些对象无论如何都不是Dates,而是POSIXct对象。它们是类别为“ POSIXct”的浮点向量。

答案 1 :(得分:0)

正如弗里克先生所说,解决方案只是simplify = FALSE