- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
正如标题所说。为什么 lubridate 函数这么慢?
library(lubridate)
library(microbenchmark)
Dates <- sample(c(dates = format(seq(ISOdate(2010,1,1), by='day', length=365), format='%d-%m-%Y')), 50000, replace = TRUE)
microbenchmark(as.POSIXct(Dates, format = "%d-%b-%Y %H:%M:%S", tz = "GMT"), times = 100)
microbenchmark(dmy(Dates, tz ="GMT"), times = 100)
Unit: milliseconds
expr min lq median uq max
1 as.POSIXct(Dates, format = "%d-%b-%Y %H:%M:%S", tz = "GMT") 103.1902 104.3247 108.675 109.2632 149.871
2 dmy(Dates, tz = "GMT") 184.4871 194.1504 197.8422 214.3771 268.4911
最佳答案
出于同样的原因,与 riding on top of rockets 相比,汽车速度较慢。增加的易用性和安全性使汽车比火箭慢得多,但被炸毁的可能性更小,而且汽车的启动、转向和制动也更容易。然而,在正确的情况下(例如,我需要登上月球),火箭是完成这项工作的正确工具。现在,如果有人发明了一辆车顶绑着火箭的汽车,我们就会有所收获。
首先看看 dmy
正在做什么,您会看到速度的差异(顺便说一下,从您的基准来看,我不会说 lubridate
是慢得多,因为这些以毫秒为单位):
dmy
#在命令行中键入此内容,您将得到:
>dmy
function (..., quiet = FALSE, tz = "UTC")
{
dates <- unlist(list(...))
parse_date(num_to_date(dates), make_format("dmy"), quiet = quiet,
tz = tz)
}
<environment: namespace:lubridate>
我立即看到 parse_date
和 num_to_date
和 make_format
。让人不禁好奇这些家伙到底是什么人。让我们看看:
parse_date
> parse_date
function (x, formats, quiet = FALSE, seps = find_separator(x),
tz = "UTC")
{
fmt <- guess_format(head(x, 100), formats, seps, quiet)
parsed <- as.POSIXct(strptime(x, fmt, tz = tz))
if (length(x) > 2 & !quiet)
message("Using date format ", fmt, ".")
failed <- sum(is.na(parsed)) - sum(is.na(x))
if (failed > 0) {
message(failed, " failed to parse.")
}
parsed
}
<environment: namespace:lubridate>
num_to_date
> getAnywhere(num_to_date)
A single object matching ‘num_to_date’ was found
It was found in the following places
namespace:lubridate
with value
function (x)
{
if (is.numeric(x)) {
x <- as.character(x)
x <- paste(ifelse(nchar(x)%%2 == 1, "0", ""), x, sep = "")
}
x
}
<environment: namespace:lubridate>
make_format
> getAnywhere(make_format)
A single object matching ‘make_format’ was found
It was found in the following places
namespace:lubridate
with value
function (order)
{
order <- strsplit(order, "")[[1]]
formats <- list(d = "%d", m = c("%m", "%b"), y = c("%y",
"%Y"))[order]
grid <- expand.grid(formats, KEEP.OUT.ATTRS = FALSE, stringsAsFactors = FALSE)
lapply(1:nrow(grid), function(i) unname(unlist(grid[i, ])))
}
<environment: namespace:lubridate>
哇,我们得到了strsplit-ting
、expand-ing.grid-s
、paste-ing
、ifelse-ing
、unname-ing
等,加上正在进行的全部错误检查(播放 Zep 歌曲)。所以我们这里有一些很好的语法糖。嗯,很好吃,但它是有代价的,速度。
将其与 as.POSIXct
进行比较:
getAnywhere(as.POSIXct) #tells us to use methods to see the business
methods('as.POSIXct') #tells us all the business
as.POSIXct.date #what I believe your code is using (I don't use dates though)
as.POSIXct
进行了更多的内部编码和更少的错误检查,因此您必须问我想要轻松和安全还是速度和功能?取决于工作。
关于r - 与 as.POSIXct 相比,为什么 lubridate 函数如此慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10645815/
我有以下一段 R 代码: formatString = "%Y-%m-%d %H:%M:%OS" x = as.POSIXct(strptime("2013-11-23 23:10:38.000000
我在这里关注了一些有关如何将字符向量转换为日期时间类的问题。我经常看到两种方法,strptime 和 as.POSIXct/as.POSIXlt 方法。我查看了这两个函数,但不清楚它们有什么区别。 s
我很感兴趣,“ct”和“lt”(在 POSIXct 和 POSIXlt 中)的含义。它们是某种缩写吗?例如,“ct”是否表示“日历时间”,“lt”是否表示其他意思? 最佳答案 我自己正在研究这个问题,
考虑以下 POSIXct 日期列表: times <- list(as.POSIXct(c("2012-07-26 00:30", "2012-07-26 6:20",
我有一个类似 Round a POSIX date (POSIXct) with base R functionality 的问题,但我希望总是将日期四舍五入到第二天午夜(00:00:00)。 基本上
我有一个日期,我将其转换为数值,然后想转换回日期。 将日期转换为数字: date1 = as.POSIXct('2017-12-30 15:00:00') date1_num = as.numeric
查看时间格式说明符,我没有看到任何日期选项,例如 2/5/2010 (月/日/年,个位数,无前导空格)。是否有任何内置方法可以转换这种格式的日期? 最佳答案 as.POSIXct('2/5/2010'
我正在尝试解析时间字符串向量并遇到一个奇怪的错误。例如,如果我运行以下代码段,R 会按预期返回结果。 time_format="%m/%d/%Y %H:%M:%S" t_1 = "03/13/2011
我想我一定不明白 POSIXct 是如何工作的,或者什么的。据我了解,这是自纪元以来的几秒钟,纪元是标准时间,例如格林威治标准时间 1970-01-01。 我在 PST 中的 EST 中取了两个 PO
转换为 POSIXct 后,为什么下面的日期会更改为“2014-07-07”? Sys.setenv(TZ='America/Sao_Paulo') d as.POSIXct("2014-07-08
这个问题在这里已经有了答案: converting multiple date formats into one in r (2 个回答) 去年关闭。 嗨,我的数据中有多种日期格式。 如何转换为日期格
在大数据表中工作时,我在日期时间列中发现了不应该存在的 NA 值......所有这些值都应该是“2014-03-30 02:00:00”。 我做了一些试验: > as.POSIXct("2014-03
我在 R 中使用 POSIXct 管理时区时遇到问题。我设置了 TZ全局选项为 "Europe/London"但自从我们切换回格林威治标准时间以来,已经运行 as.POSIXct不再将数字向量转换回正
我正在尝试转换 yearmon日期(来自 zoo 包)到 UTC 时区中的 POSIXct。 这就是我试图做的: > as.POSIXct(as.yearmon("2010-01-01"), tz="
我将日期和时间存储在两列中。第一个的日期为“20180831”。时间存储为从午夜开始的秒数;凌晨 3 点将存储为 10,800。 我需要一个合并的日期时间列,并且在处理一些应该很简单的事情时遇到了困难
我有以下时间间隔,我想将其分成 10 个等间隔的实例。 head(data) stoptime starttime1 2014-08-19 14:52:04
这个问题已经有答案了: How R formats POSIXct with fractional seconds (2 个回答) 已关闭 10 年前。 我不确定这是否只是输出问题,但只是想检查一下。
我正在将 CSV 文件读入变量“stuff”并将第一列强制转换为 POSIXct(该列只有时间戳,格式为“2012-12-04 17:49:52”,因此效果很好). stuff[,1]<-as.POS
我有以下时间间隔,我想将其分成 10 个等间隔的实例。 head(data) stoptime starttime1 2014-08-19 14:52:04
我下载了一些气候再分析数据,花了很多时间从 grib 转换为 cdf,最后现在我成功地使其在 R 中工作。我遇到的下一个问题是时间是一个字符向量,类似于以下内容: tt =c( "200901
我是一名优秀的程序员,十分优秀!