我有个约会.
这是一个例子(由...生成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=',')
在这两种情况下,输出都是"字符"类
这是不正确的
> 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)