Tho*_*mas 12 datetime r strftime cran
我在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"
Run Code Online (Sandbox Code Playgroud)
这是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] ""
Run Code Online (Sandbox Code Playgroud)
如您所见,输出strftime
是一个空字符串而不是ISO 8601格式化日期.知道这两个版本之间的变化是什么吗?我怎么能纠正这个?或者,我怎样才能避免CRAN上的测试失败?
在早期版本的 R 中,%F 可能不是一个选项。因此,基本代码会忽略该字符串,因此它会格式化为空字符串。我尝试使用当前帮助中没有的字母,它返回一个带有该字母而不是日期的字符串。
Thomas,testthat 中有一个skip()
函数和skip_on_CRAN 功能。
看看帮助
?testthat::skip_on_cran
Run Code Online (Sandbox Code Playgroud)wbeasley有一些测试代码可以帮助您。(请参阅他在25595487中对 Rappster 的回答中的有用评论)。您将看到他如何将此跳过命令放在 testthat 函数括号内。转述如下:
library(testthat)
testthat("example"),{
testthat::skip_on_cran()
# test code below
x <-2
expect_equal(x,2)
})
Run Code Online (Sandbox Code Playgroud)这可能是 Windows 操作系统的问题。进一步挖掘揭示了这一点 - 看看描述 R 3.0.2 的内容。http://www.inside-r.org/r-doc/base/strftime
该文档警告 Windows 中某些 % 标志存在一些问题。引用(我的粗体):
也在当前标准中定义但不太广泛实现(例如不适用于 Windows 上的输出)
%C 世纪(00--99):年份的整数部分除以100。
...
%F 相当于 %Y-%m-%d(ISO 8601 日期格式)。
...
希望这可以帮助!