Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 将POSIXct对象传递给函数将返回数值向量_R_Vector_Numeric_Posixct_Coercion - Fatal编程技术网

R 将POSIXct对象传递给函数将返回数值向量

R 将POSIXct对象传递给函数将返回数值向量,r,vector,numeric,posixct,coercion,R,Vector,Numeric,Posixct,Coercion,我试图对POSIXct向量进行一些操作,但当我将其传递给函数时,向量会变成numeric向量,而不是保留POSIXct类,即使函数本身只返回对象: # Sample dates from vector and it's class. > dates <- as.POSIXct(c("2012-02-01 12:32:00", "2012-10-24 17:25:56", "2008-09-26 17:13:31", "2011-08-23 11:11:17,", "2015-09-1

我试图对
POSIXct
向量进行一些操作,但当我将其传递给函数时,向量会变成
numeric
向量,而不是保留
POSIXct
类,即使函数本身只返回对象:

# Sample dates from vector and it's class.
> dates <- as.POSIXct(c("2012-02-01 12:32:00", "2012-10-24 17:25:56", "2008-09-26 17:13:31", "2011-08-23 11:11:17,", "2015-09-19 22:28:33"), tz = "America/Los_Angeles")
> dates
[1] "2012-02-01 12:32:00 PST" "2012-10-24 17:25:56 PDT" "2008-09-26 17:13:31 PDT" "2011-08-23 11:11:17 PDT" "2015-09-19 22:28:33 PDT"
> class(dates)
[1] "POSIXct" "POSIXt" 
# Simple subset is retaining original class.
> qq <- dates[1:5]
> qq
[1] "2012-02-01 12:32:00 PST" "2012-10-24 17:25:56 PDT" "2008-09-26 17:13:31 PDT" "2011-08-23 11:11:17 PDT" "2015-09-19 22:28:33 PDT"
> class(qq)
[1] "POSIXct" "POSIXt" 
# sapply on the same subset using simple "return" function changes class to "numeric" - why? How to retain "POSIXct"?
> qq2 <- sapply(dates[1:5], function(x) x)
> qq2
[1] 1328128320 1351124756 1222474411 1314123077 1442726913
> class(qq2)
[1] "numeric"
#vector及其类的样本日期。
>日期
[1] “2012-02-01 12:32:00太平洋标准时间”“2012-10-24 17:25:56太平洋标准时间”“2008-09-26 17:13:31太平洋标准时间”“2011-08-23 11:11:17太平洋标准时间”“2015-09-19 22:28:33太平洋标准时间”
>课程(日期)
[1] POSIXct“POSIXt”
#简单子集保留原始类。
>qq
[1] “2012-02-01 12:32:00太平洋标准时间”“2012-10-24 17:25:56太平洋标准时间”“2008-09-26 17:13:31太平洋标准时间”“2011-08-23 11:11:17太平洋标准时间”“2015-09-19 22:28:33太平洋标准时间”
>班级(qq)
[1] POSIXct“POSIXt”
#使用简单的“return”函数将类更改为“numeric”——为什么?如何保留“POSIXct”?
>qq2 qq2
[1] 1328128320 1351124756 1222474411 1314123077 1442726913
>级别(qq2)
[1] “数字”

为什么会这样?如何保留原始向量的
POSIXct
类?我知道
POSIXct
numeric
,但我想保留原始类以提高可读性。

我们可以使用
lappy
而不是
sapply
,因为
sapply
默认情况下有
simplify=TRUE
选项。因此,如果
列表
元素的长度相同,它将根据
列表
元素的长度将其简化为
向量
矩阵
,并且
POSIXct
存储为
数值

lst <- lapply(dates, function(x) x)
应用函数后,如果需要作为向量输出

do.call("c", lst)
关于时区的变化,记录在
?DateTimeClasses

在“POSIXlt”对象上使用c将其转换为当前时区, 在“POSIXct”对象上,会删除任何“tzone”属性(即使它们 都标有相同的时区)

因此,可能的选择是(正如@kmo在评论中提到的)

或者在评论中提到@thelatemail

.POSIXct(sapply(dates,I), attr(dates,"tzone") )

@kmo我想您可能需要用
tz
指定时区,谢谢您的回答!但我注意到一件事——在转换为矢量后,时区被更改为本地时区:
>do.call(“c”,lapply(日期[1:5],函数(x)x))[1]“2012-02-01 21:32:00 CET”“2012-10-25 02:25:56 CEST”“2008-09-27 02:13:31 CEST”“2011-08-23 20:11:17 CEST”“2015-09-20 07:28:33 CEST”“
。有什么想法吗?@kmo在我的系统中,你的原始日期有
PST
PDT
作为时区。是的,原始日期有“PST/PDT”,但在
do.call(“c”,lst)
tz之后改为我的本地时区,即“CEST/CET”-我想知道为什么会发生这种情况,以及如何缓解这个问题。@akrun-我想我欺骗了自己-我应该去睡觉了!-只要
.POSIXct(sapply(dates,I),attr(dates,tzone))
就可以了。
.POSIXct(lst, tz = "America/Los_Angeles")
#[1] "2012-02-01 12:32:00 PST" "2012-10-24 17:25:56 PDT" "2008-09-26 17:13:31 PDT" "2011-08-23 11:11:17 PDT" "2015-09-19 22:28:33 PDT"
.POSIXct(sapply(dates,I), attr(dates,"tzone") )