【问题标题】:Why does R's replicate turn a Date into a number?为什么 R 的复制将日期转换为数字?
【发布时间】:2019-02-19 15:13:34
【问题描述】:

我正在尝试使用 Python Faker 库中的一些函数在 R 中构建一个 tibble。除日期外,所有工作正常,日期被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 创建

【问题讨论】:

  • 尝试使用simplify=FALSE
  • 完美,有效。我认为 sapply 的默认值是 FALSE!谢谢!

标签: python r


【解决方案1】:

R Date-classed 向量是具有“Date”类的整数和各种尊重该类的通用函数,以产生用户期望从此类对象获得的行为。 R 数组不能保存具有属性的对象,因此对数组的强制转换会取消对象的分类,从而揭示其底层存储类。

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

看看输出

 print.Date
 '+.Date'
 diff.Date

最后获取任何数据对象并执行:

 dput(object) 

看看:

  sapply

而且你的那些对象不是 Dates 而是 POSIXct 对象。它们是“POSIXct”类的浮点向量。

【讨论】:

    【解决方案2】:

    正如 Flick 先生评论的那样,解决方案只是 simplify = FALSE

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-09
      • 2021-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多