as.character的结果取决于向量内容(re:粘贴POSIX日期时间)

Abe*_*Abe 3 datetime r

我有个约会.

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

mydate <- structure(1361998255.23362, class = c("POSIXct", "POSIXt"), tzone = "")
Run Code Online (Sandbox Code Playgroud)

如果我把它放在矢量中它看起来没问题:

(根据@joran的评论,我减少了原来as.character只用的例子c.现在我提供两种情况)

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

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

> c('a', mydate)
[1] "a"                "1361998255.23362"
> as.character('a', mydate)
[1] "a"                "1361998255.23362"
Run Code Online (Sandbox Code Playgroud)

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

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

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

这是唯一的缺点:如果我输入一个有五个日期的向量,我宁愿不必写五次.

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

Bri*_*ggs 6

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

这是不正确的

> class(c(mydate))
[1] "POSIXct" "POSIXt" 
> dput(c(mydate))
structure(1361998255.23362, class = c("POSIXct", "POSIXt"))
Run Code Online (Sandbox Code Playgroud)

c(mydate)仍然是一个POSIXt对象.打印时,它看起来像一个角色,但它不是一个角色.对象c有这种行为,POSIXt因为有一个专门的c.POSIXct功能.

在第二种情况下,第一个参数是一个字符,因此默认为(内部)版本c.这样做有两件事:它除了名称和促销之外的属性除了可以代表所有元素的类型(参见帮助页面c).剥离mydate给出的属性

> as.vector(mydate)
[1] 1361998255
Run Code Online (Sandbox Code Playgroud)

将数字提升为一个字符

> as.character(as.vector(mydate))
[1] "1361998255.23362"
Run Code Online (Sandbox Code Playgroud)

现在连接此字符串"a"以显示您看到的结果.

> c('a', mydate)
[1] "a"                "1361998255.23362"
Run Code Online (Sandbox Code Playgroud)

对于多个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"
Run Code Online (Sandbox Code Playgroud)