R3.0.3和R3.1.3中的日期时间格式化

12

我在CRAN上发布了一个叫做UNF的软件包,它可以为一个data.frame(用于数据引用)创建哈希值。我的软件包中有一些与日期时间格式相关的测试(我使用testthat)。它们在当前版本的R(3.1.3)上可以正确运行,但是一旦我提交到CRAN后,在“r-oldrel-windows”(3.0.3)上就会有其中一个测试失败

我已经追踪到了问题的根源,出现差异的代码如下,在两个R版本中产生不同的结果。以下是正确的输出(来自3.1.3):

x = strptime("2014-08-22T16:51:05Z", "%FT%H:%M:%OSZ", tz="UTC")
x
# [1] "2014-08-22 16:51:05 UTC"
strftime(x, "%F")
# [1] "2014-08-22"

这里是 3.0.3 的输出结果:

x = strptime("2014-08-22T16:51:05Z", "%FT%H:%M:%OSZ", tz="UTC")
x
# [1] "2014-08-22 16:51:05 UTC"
strftime(x, "%F")
# [1] ""

如您所见,strftime 的输出是一个空字符字符串,而不是 ISO 8601 格式的日期。这两个版本之间有什么变化?我该如何更正?或者,我该如何避免 CRAN 上的测试失败?

1个回答

2

可能在早期版本的R中,%F不是一个选项。因此,基础代码会忽略该字符串,因此格式为空字符串。我尝试使用当前帮助中不存在的字母,它会返回一个带有该字母而不是日期的字符串。

Thomas,testthat中有一个skip()函数和skip_on_CRAN功能。

  1. Take a look at help

    ?testthat::skip_on_cran
    
  2. wbeasley has some test code which may assist you. (See his helpful comments in this answer to Rappster in 25595487). You will see how he puts this skip command inside the testthat functions brackets. Paraphrasing it below:

    library(testthat)        
    
    testthat("example"),{
      testthat::skip_on_cran()
      # test code below
      x <-2
      expect_equal(x,2)
    })
    
  3. It might be an OS thing with Windows. Doing some more digging revealed this - Take a look at this describing R 3.0.2. http://www.inside-r.org/r-doc/base/strftime

    The docs warn of some issues with some % flags in Windows. Quoting (my bold):

当前标准也有定义,但实现较少(例如在Windows上无法输出)的包括:

%C 世纪(00--99):年份除以100后的整数部分。

...

%F 等同于%Y-%m-%d(ISO 8601日期格式)。

...

希望对您有所帮助!


没错,就是这样。在 Windows 上以 %F 格式输出之前是不被支持的。谢谢! - Thomas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接