为什么sapply没有使用lubridate';s解析日期时间,而lapply不解析?
给定:一个简单的4x2数据帧,填充字符类型的数据 目标:相同的数据帧,但所有值都被应用以下lubridate函数调用的结果所替换:为什么sapply没有使用lubridate';s解析日期时间,而lapply不解析?,r,lapply,sapply,lubridate,R,Lapply,Sapply,Lubridate,给定:一个简单的4x2数据帧,填充字符类型的数据 目标:相同的数据帧,但所有值都被应用以下lubridate函数调用的结果所替换:parse_date_time(df,orders=c(“ymd_hms”,“mdy_hms”),tz=“ETZ”) 似乎使用lappy效果很好。使用sapply时,parse_date_time函数返回奇怪的大整数 以下是数据: df原因是sapply默认情况下具有simplify=TRUE并且当列表元素的长度或维度相同时,它会简化为向量或矩阵。在内部,日期时间类存
parse_date_time(df,orders=c(“ymd_hms”,“mdy_hms”),tz=“ETZ”)
似乎使用lappy效果很好。使用sapply时,parse_date_time函数返回奇怪的大整数
以下是数据:
df原因是sapply
默认情况下具有simplify=TRUE
并且当列表
元素的长度或维度相同时,它会简化为向量
或矩阵
。在内部,日期时间类存储为数字
typeof(parse_date_time(df$starttime, orders = c("ymd_hms", "mdy_hms"), tz = "ETZ"))
#[1] "double"
而类
是“POSIXct”`
class(parse_date_time(df$starttime, orders = c("ymd_hms", "mdy_hms"), tz = "ETZ"))
#[1] "POSIXct" "POSIXt"
因此,在执行矩阵
转换时,它强制执行该操作,而在列表
中,它保留类
格式
如果我们对data.frame
感兴趣,那么我们将创建一个“df”的副本,并使用[]
获得与“df”相同的结构
df2 <- df
df2[] <- lapply(df, FUN = function(column) {
parse_date_time(column, orders = c("ymd_hms", "mdy_hms"), tz = "ETZ")
})
df2
# starttime stoptime
#1 2014-01-13 12:08:02 2014-01-13 12:19:46
#2 2014-01-14 09:59:09 2014-01-14 10:05:09
#3 2016-06-18 17:43:42 2016-06-18 18:06:59
#4 2016-06-27 12:16:47 2016-06-27 12:29:05
df2关于使用df2[]让lappy返回与df2相同结构的内容的最后一句话。。。我从哪里可以了解到这件事,它叫什么?比如说,船长。