gpt4 book ai didi

arrays - 在 R 中,将函数应用于多个输入以返回 POSIXlt 数组

转载 作者:行者123 更新时间:2023-12-02 04:44:59 26 4
gpt4 key购买 nike

我有一个函数可以从多个字符串输入创建时间戳:

# Create timestamp from date, time, and timezone strings
str_to_dt <- function(date_str, time_str, tz_str){
as.POSIXlt(x = paste(date_str, time_str), format = "%m/%d/%Y %H:%M",
tz = tz_str)
}

我有输入值数组:

dates <- c("01/23/1945", "11/11/1911")
times <- c("12:12", "13:13")
tzones <- c("Pacific/Guam", "America/New_York")

由于 as.POSIXlt 仅采用常量 tz,而不是向量,因此我必须循环遍历这些。以下 for 循环产生我想要的输出,但我更愿意了解如何在 plyr 中执行此操作。

ts <- as.POSIXlt(rep(NA,length(dates)))
for(i in 1:length(dates)){
ts[i] <- str_to_dt(date_str = dates[i],
time_str = times[i],
tz_str = tzones[i])
}
ts
[1] "1945-01-23 11:11:00 GST" "1911-11-11 13:13:00 EST"

当我使用maply时,我得到了日期时间的分量向量列表,这不是我想要的。

mapply(FUN=str_to_dt, date_str=dates, time_str=times, tz_str=tzones) # decomposed

当我使用 mlply 时,我可以获得正确的 2 个 POSIXlt 结果的列表:

library(plyr)

mlply(.data=data.frame(date_str = dates, time_str = times,
tz_str = tzones, stringsAsFactors=FALSE),
.fun=str_to_dt)

但我无法将它们放回到数组中,因为 unlist 完全分解了 POSIXlt。类似的函数 maply 给我一个错误:

maply(.data=data.frame(date_str = dates, time_str = times, tz_str = tzones,
stringsAsFactors=FALSE),
.fun=str_to_dt) # Error: Results must have one or more dimensions.

如何修复错误以使 maply 正常工作,或者有更好的方法吗?

最佳答案

c() 会将列表转换为类型化向量,但前提是您间接调用它。

> d <- as.POSIXlt(Sys.Date())
> dlist <- list(d,d)
> do.call(c, dlist)
[1] "2014-09-17 17:00:00 PDT" "2014-09-17 17:00:00 PDT"
> str(do.call(c, dlist))
POSIXlt[1:2], format: "2014-09-17 17:00:00" "2014-09-17 17:00:00"

关于arrays - 在 R 中,将函数应用于多个输入以返回 POSIXlt 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25919288/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com