as.character 的结果取决于向量内容(re : pasting a POSIX date-time)

标签 r datetime

我有个约会。

这是一个示例(由 mydate <- lubridate::now() 生成):

mydate <- structure(1361998255.23362, class = c("POSIXct", "POSIXt"), tzone = "")

如果我把它放在一个向量中,它看起来还不错:

(根据@joran 的评论,我将最初使用 as.character 的示例缩减为仅使用 c 。现在我提供两种情况)

> c(mydate)
[1] "2013-02-27 14:50:55 CST"
> as.character(mydate)
[1] "2013-02-27 14:50:55"

但是,如果我尝试将它与另一个字符元素结合使用,则会剥离日期时间格式:

> c('a', mydate)
[1] "a"                "1361998255.23362"
> as.character('a', mydate)
[1] "a"                "1361998255.23362"

在这两种情况下,输出都是“字符”类

为什么 c根据输入向量的内容提供不同的结果?正在添加 as.character(mydate)一个合适的解决方案?

> c('a', as.character(mydate))
[1] "a"                   "2013-02-27 14:50:55"

唯一的缺点:如果我输入一个包含五个日期的向量,我宁愿不必写五次 as.character。

context: 以上是一个最小的可重现示例。上下文是我将一个向量传递给一个函数,该函数将一个向量转换为一个逗号分隔的字符串,以便编写 sql 语句:function(x) paste(paste("'", x, "'", sep=''), collapse=',')

最佳答案

in both cases, the output is of class "character"

这是不对的

> class(c(mydate))
[1] "POSIXct" "POSIXt" 
> dput(c(mydate))
structure(1361998255.23362, class = c("POSIXct", "POSIXt"))

c(mydate) 仍然是一个 POSIXt 对象。打印时,它看起来像一个字符,但它不是一个字符。 cPOSIXt 对象有这种行为,因为有一个专门的 c.POSIXct 函数。

在第二种情况下,第一个参数是一个字符,所以它默认为 c 的(内部)版本。这做了两件事:它去除了除名称之外的属性,并将提升到可以表示所有元素的类型(参见 c 的帮助页面)。剥离 mydate 的属性给出

> as.vector(mydate)
[1] 1361998255

将数字提升为字符给出

> as.character(as.vector(mydate))
[1] "1361998255.23362"

这个字符串现在与 "a" 连接,得到你看到的结果。

> c('a', mydate)
[1] "a"                "1361998255.23362"

关于多个 as.character() 调用以在正确的时间获得强制,您可以使用 c 将所有日期包装在一起(它使用 c .POSIXct) 和调用 as.character

> c('a', as.character(c(mydate, mydate)))
[1] "a"                   "2013-02-27 12:50:55" "2013-02-27 12:50:55"

关于as.character 的结果取决于向量内容(re : pasting a POSIX date-time),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15122461/

相关文章:

c# - 如何在 Raspberry PI 上使用 UWP 应用程序设置系统时间

c# - 在文本框上单击,显示(弹出)日历?

c# - 如何在 Dynamics CRM 中将日期时间字段转换为日期?

r - 通过knitr和igraph在 latex 中的tkplot

python - 来自 tidyverse 的 mutate_if 的等效 Python 代码

python datetime %d 导致问题

java - Android DatePicker 和 DateFormat 输出格式为 'mm-dd-yyyy'

r - R是否有任何正式的命名约定?

r - 转置 data.table 的最佳方法

r - 错误 : only defined on a data frame with all numeric variables with ddply on large dataset