R3.0.3 和 R3.1.3 中的日期时间格式
Datetime formatting in R3.0.3 and R3.1.3
我在 CRAN 上有一个名为 UNF 的包,它创建了一个 data.frame
的散列(用于数据引用)。我在包中有一些与日期时间格式相关的测试(我正在使用 testthat)。它们在当前版本的 R (3.1.3) 上正常工作,但是一旦我提交给 CRAN,one of these tests fail on "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 上的测试失败?
可能 %F 在早期版本的 R 中不是一个选项。因此基本代码忽略了该字符串,因此它被格式化为空字符串。我尝试使用当前帮助中没有的字母,它 returns 一个字符串,该字母不是日期。
Thomas,testthat 中有一个 skip()
函数和 skip_on_CRAN 功能。
看看帮助
?testthat::skip_on_cran
wbeasley 有 some test code which may assist you. (See his helpful comments in this answer to Rappster in 25595487)。您将看到他如何将这个跳过命令放在函数括号内。解释如下:
library(testthat)
testthat("example"),{
testthat::skip_on_cran()
# test code below
x <-2
expect_equal(x,2)
})
这可能是 OS 与 Windows 的事情。做更多的挖掘揭示了这一点——看看这个描述 R 3.0.2 的内容。 http://www.inside-r.org/r-doc/base/strftime
文档警告 Windows 中某些 % 标志存在一些问题。引用(我的粗体):
Also defined in the current standards but less widely implemented (e.g. not for output on Windows) are
%C Century (00--99): the integer part of the year divided by 100.
...
%F Equivalent to %Y-%m-%d (the ISO 8601 date format).
...
希望对您有所帮助!
我在 CRAN 上有一个名为 UNF 的包,它创建了一个 data.frame
的散列(用于数据引用)。我在包中有一些与日期时间格式相关的测试(我正在使用 testthat)。它们在当前版本的 R (3.1.3) 上正常工作,但是一旦我提交给 CRAN,one of these tests fail on "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 上的测试失败?
可能 %F 在早期版本的 R 中不是一个选项。因此基本代码忽略了该字符串,因此它被格式化为空字符串。我尝试使用当前帮助中没有的字母,它 returns 一个字符串,该字母不是日期。
Thomas,testthat 中有一个 skip()
函数和 skip_on_CRAN 功能。
看看帮助
?testthat::skip_on_cran
wbeasley 有 some test code which may assist you. (See his helpful comments in this answer to Rappster in 25595487)。您将看到他如何将这个跳过命令放在函数括号内。解释如下:
library(testthat) testthat("example"),{ testthat::skip_on_cran() # test code below x <-2 expect_equal(x,2) })
这可能是 OS 与 Windows 的事情。做更多的挖掘揭示了这一点——看看这个描述 R 3.0.2 的内容。 http://www.inside-r.org/r-doc/base/strftime
文档警告 Windows 中某些 % 标志存在一些问题。引用(我的粗体):
Also defined in the current standards but less widely implemented (e.g. not for output on Windows) are
%C Century (00--99): the integer part of the year divided by 100.
...
%F Equivalent to %Y-%m-%d (the ISO 8601 date format).
...
希望对您有所帮助!