首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在日期向量上使用sapply :函数速度非常慢。为什么?

在日期向量上使用sapply函数速度非常慢的原因是因为sapply函数在处理日期向量时,需要进行大量的类型转换和计算操作,导致运行时间较长。

具体来说,日期向量通常是由日期对象组成的,而日期对象在内部是以特定的数据结构存储的,例如POSIXct或POSIXlt。当使用sapply函数对日期向量进行操作时,sapply会将每个日期对象转换为标准的R数据类型,如字符型或数值型,然后再进行计算。这个类型转换的过程会消耗大量的时间和资源。

另外,日期向量上的操作通常涉及到日期的比较、计算和格式化等操作,这些操作相对复杂,需要进行多次迭代和计算。而sapply函数是一个逐元素的循环函数,它会对日期向量中的每个元素进行操作,这样就会导致大量的重复计算,进一步降低了运行速度。

为了提高在日期向量上的操作速度,可以考虑使用其他更高效的函数或方法,例如lapply、vapply、sweep等。这些函数在处理日期向量时,可以更好地利用R语言的向量化特性,减少类型转换和重复计算的次数,从而提高运行效率。

此外,还可以考虑使用一些专门用于处理日期向量的包,如lubridate包或data.table包。这些包提供了更高效和方便的函数,可以更快地进行日期向量的操作和计算。

总结起来,sapply函数在处理日期向量时速度较慢的原因主要是类型转换和重复计算的影响。为了提高运行速度,可以尝试使用其他更高效的函数或包来处理日期向量。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

社交网络分析的 R 基础:(四)循环与并行

循环语句 while for 循环控制 apply() 系列函数 apply() sapply() 使用 parallel 包并行处理 本机上并行 多台计算机上并行 循环语句 while while...一般使用最多的是对矩阵处理的函数 apply() 以及对向量处理的函数 sapply()。 apply() 系列函数[1] apply() apply() 函数用于多维数据的处理,比如矩阵。...其本质是对 for 循环的进一步封装,并不会加快计算速度。apply() 函数的定义如下: apply(X, MARGIN, FUN)  提示 要查看函数的文档可以 R 终端中键入“?...对一个矩阵的行求和使用 apply() 函数更简单,但效率不如 sapply()。...使用向量运算的前提下计算向量的平方,使用 sapply() 函数可以这样: > v <- c(1, 2, 3) > sapply(v, function(item) { return(item ^

1.3K10

高效R编程

高效编程的5个技巧 1、小心,尽量不要增大向量的大小 2、尽可能向量化代码 3、适当时机下使用因子 4、通过缓存变量避免不必要的计算 5、字节编译包可使性能轻而易举大幅提升 一般性建议 底层语言如C,需要你自己进行内存管理...,而R语言这些不用你负责,优点是可交互,缺点是运行速度,特别是糟糕的代码,推荐书《The R Inferno》。...向量化代码 for循环代码不是因为循环,而是因为函数调用太多。 与用户交互 致使错误stop() stop()抛出致命错误,执行终止,不再执行任何操作,下面的处理代替stop()更好些。...lapply() 输入是向量/列表,返回列表。 sapply()和vapply()与lapply()类似,返回值不一定是列表。...保存函数的运行结果,牺牲缓存换速度,最多能100倍的速度提升,在内存充足的今天应该还好,只要不大数据,16G内存已经普遍了。典型应用是shiny app,可以回事用户得到结果,减少等待时间。

1.3K30
  • R语言︱数据集分组、筛选(plit – apply – combine模式、dplyr、data.table)

    2.aggregate函数不能对分组后的数据进行多种汇总计算,因此要用两句代码分别实现sum和max算法,最后再用cbind拼合。显然,上述代码性能和易用性存在不足。...base包里和split功能接近的函数有cut(对属性数据分划),strsplit(对字符串分划)以及subset(对向量,矩阵或数据框按给定条件取子集)等。...3.Lapply函数也不支持多种统计方法,因此也要用两句代码分别实现sum和max算法,最后再用cbind拼合。另外,本算法还要额外用到split函数,因此易用性没有改进,反而是更差了。...总结: 本算法性能上有所提高,但在易用性上明显不足,代码写法、业务逻辑、计算结果仍然存在不一致。...使用data.table时候,需要预先布置一下环境: data<-data.table(data) 如果不布置环境,很多内容用不了。

    20.8K32

    R语言的数据结构(包含向量向量化详细解释)

    3向量化及向量函数 3.1向量输入,向量或矩阵输出 向量输入,向量输出 向量化就是对向量的每一个元素应用函数,如果一个函数使用向量化的运算符,那么它也被向量化了,代码运行速度会提升。...,可用sapply函数进行简化,调用sapply(x,f)可对x的每一个元素使用函数f(),并将结果转化为矩阵。...4.2对矩阵的行和列调用函数 apply函数矩阵的各行和格列上调用制定的函数) apply(m,dimcode,f,fargs) m为矩阵 dimcode为维度编号,1代表对每一行应用函数,2...还有合并 apply族函数在数据框中的用法 apply lapply sapply apply 如果数据框的每一列的数据类型相同,则可以对该数据框使用apply函数。或针对数据框中的某些列应用。...lapply和sapply 因为数据框技术就是列表,所以lapply和sapply可以应用于数据框。

    7.1K20

    Hadley Wickham 采访节选(一)

    我第一次这门课的时候简直是噩梦——你需要记忆R中各种毫无规律的字符串函数名称,例如grep, grepl, regexpr, gregexpr……后来我有一次洛杉矶旅行的时候突然有了个主意:为什么我不写个包把所有...写了这个包,把base R中的正则表达式函数全都用统一的名称给命名了一遍,它也就成了stringr的基础。很自然的,第二次这门课的时候,我就使用stringr教学生了。...stringi是一个原创的包,包含了很多非常棒的C库(速度快),而stringr最初只是对于base R函数的一个打包。...于是我想,为什么我不直接用stringr去打包(wrap)stringi呢?这样就可以避免两者相同函数上的不同实现(implementation),大大方便广大使用者。所以显然,两者是合作的关系。...例如base R中的sapply就不是对象类型一致的,因为sapply会首先尝试返回一个向量,如果实在无法coerce成向量,那么就返回一个list;而 tidyver 库中有个叫做purrr的包,他有个函数

    85630

    R语言性能Tips和GC

    它甚至可以帮助您编写更快的代码,因为copy造成的副本是代码速度的主要原因。希望博主的这篇博客可以帮助您理解R中的内存管理基础知识,从单个对象到函数,再到更大的代码块。...另外两点也很重要:利用compiler进行提前预编译,进而加快运行速度一个就是使用GPU让R运行的更快。 6.养成良好的编程习惯(代码风格、注释、设计模式和深度思考的习惯即问题本质)。...elapsed time:约等于用户态+内核态时间 我们能看到采用for循环时间是向量化矩阵时间37倍,并且在用户态和内核态的时间基本是没有时间消耗。...如果我们函数定义时加了逻辑判断表达式会破坏向量化计算的。...ifelse、Vectorize和sapply转化向量化运算。

    1.8K00

    R- calendR包 - 私人定制专属日历

    上期推送可见:R可视乎|2021年日历大派送 今天来说说这个包吧,非常简单,比起ggplot2包绘制日历要简单的多。 R中的年历图 该软件包非常易容易使用,因为它仅包含一个命名函数calendR。...使用月度日历图时,可以使用text参数向日期添加一些文本,并使用参数text.pos指定其位置。...如果你想设置某个时间段(下面是2020年9月-2021年5月31日)的日历,非常使用科研人员,学生。...可以使用pdf = TRUE将日历进行导出(默认为A4格式)。可以doc_name参数中指定生成的PDF文件的名称。此外,你可以几种纸张尺寸之间进行选择以保存日历,从"A6"到,"A0"。...sapply函数,把所有月份输出。

    1.4K20

    超强Python『向量化』数据处理提速攻略

    1 向量化 1000倍的速度听起来很夸张。Python并不以速度著称。这是真的吗?当然有可能 ,关键在于你如何操作! 如果在数据使用for循环,则完成所需的时间将与数据的大小成比例。...实质是一个for loop。 我们可以使用它的一种方式,包装我们之前的函数我们传递列时不起作用的函数,并向量化它。它比.apply()快得多,但也比.where()慢了17倍。...contains基本和re.search做的是一样的,它会给我们相同的结果。 为什么.str向量化这么? 字符串操作很难并行化,所以.str方法是向量化的,这样就不必为它们编写for循环。...你可以使用.map()向量化方法中执行相同的操作。 3、日期 有时你可能需要做一些日期计算(确保你的列已经转换为datetime对象)。这是一个计算周数的函数。...Dask是Pandas API中工作的一个不错的选择。能够跨集群扩展到TB级的数据,或者甚至能够更有效地一台机器处理多核数据。 6 总结 向量化可以极大地加快速度

    6.7K41

    35行代码搞定事件研究法(下)

    注意 I,本代码主要使用data.table包完成,关于data.table包的相应知识会在涉及的时候进行讲解。以后的课堂中,我们会重点介绍data.table这个包。...注意 II, 本代码还使用了partial()函数,它来自于pryr这个包 ?...在上一讲中,我们已经给出了函数 do_car() 用来求单个事件日的超额收益,因此很自然的,我们希望对于事件日向量 ns 中的每个元素,都应用一遍 do_car()这个函数。...性能测试 大猫在这里给出的代码已经经过高度优化,是尝试众多可行方法后给出的计算速度最快的版本。小伙伴大可不必担心自己的数据太多计算机跑不起来。但是口说无凭,大猫在这里给出用模拟数据得到的测试结果。...大猫用这个数据集自己的surface pro 4 i5版连续跑了三遍,每一次的耗时分别为: 79s 81s 82s 三次平均耗时80秒左右。

    1.2K40

    R编程之路_数据汇总(2)

    1、apply函数: 这个函数使用格式为:apply(X,MARGIN, FUN, ...)。它应用的数据类型是数组或矩阵,返回值类型由FUN函数结果的长度确定。...sd、sum或mean函数的返回值的向量长度都是1(每一次单独计算),apply函数结果的维数与MARGIN的向量长度相同;如果FUN函数返回值的长度不是1而是每次都为n,apply函数的结果是维度为c...2、lapply、sapply和vapply函数: 这几个函数是一套,前两个参数都为X和FUN,其他参数R的函数帮助文档里有相信介绍。...$ShuXue 15. 50% 70% 90% 16.87.0 96.6 99.6 2.2 sapply返回的结果比较“友好”,如果结果很整齐,就会得到向量或矩阵或数组 sapply是simplify...vapply增加的FUN.VALUE参数可以直接对返回值类型进行检查,这样的好处是不仅运算速度快,而且程序运算更安全(因为结果可控)。

    58740

    R语言从入门到精通:Day6

    数据处理中数学函数是不可或缺的,上面这些函数也是最常见和常用的一部分函数。它们不仅可以对单个标量使用,也可以作用于向量、矩阵、数据框等,这时函数会分别作用于每个独立的值。...这里就不一一举例示范函数使用了,大家不妨自己动手试一试。 2. 统计函数(掌握) 下面给大家列出常见的统计函数。 ? 如果没有这些函数,我们要求一个数值向量的均值、方差和标准差该怎么办呢?...图1:均值和标准差的两种实现 实际我们还是借用了求和函数,就算如此,代码量也有所增加。上面这些简单而重要的统计函数将会伴随你使用R语言的全部旅程。 3....函数的应用(了解) R的诸多特点之一,就是R的函数使用很灵活,不仅可以应用在标量,也可以照搬到向量、矩阵等高维数据类型。...函数apply()因为其灵活性,功能很强大并且应用广泛,与之类似的还有sapply()和lapply(),主要用于列表

    78711

    R编程(七:向量类型详解2)

    同样的操作也可以用来取子集: 一些使用的注意事项 一般来说,c() 是创建向量的语法,但R 也提供了一些例外:可不要因为它们养成坏习惯了哦。 2....尽可能的向量化 我觉得下面的内容讲的更全:https://www.yuque.com/mugpeng/rr/01r-de-bian-cheng-xiao-lu 这里提一下Vectorize函数,可以将标量...(接受单一参数的)函数转换为向量化形式: if_else_statement <- function(vec_element) { if(vec_element == "Fire") { vec_element...可见还是尽量不要用Vectorize 做向量化操作呀。 3. 非向量化的情况 输入为一次输出 但其实有的如cumsum cumprod 等也考虑到了一些基本的运算。...但如果,花两小时时间将lapply 修改为doLapply 就为了提高脚本0.1s 的速度,我劝你还不如打两把游戏。 5. 记住这句话 image.png

    35550

    生信技能树 R习题 11-20

    11 使用R语言获取人类所有基因的名字,ID,symbol以及别名倒是没想到18年的时候还要纠结基因名转换的问题不过这个内容现在已经被生信马拉松最新分享的代码替代了12 R语言读书笔记以及为什么发读书笔记...)14 一文掌握SVM用法(基于R语言)支持向量机的代码(包括基本的二分类变量,拓展的多分类变量+预测连续变量)“ 共有9 种核函数,常用的为其中的前四个:linear,Polynomial,RBF,Sigmoid...;对原始问题没有前提假设的情况下用rbf kernel可以拟合任意形状的决策边界,就是训练非常……15 R语言学习入门导航-特别版这篇是R语言学习的导航内容文末给出了一些R语言的练习题(要求很高呢,至今就在第一步...练习(编程题)比较R语言中apply, sapply, lapply等函数的异同;比较paste和sprintf的异同;以及其他你觉得可以比较的函数。...R里面有哪些函数和第三方包(没有数量限制)可以使用正则表达式。

    8810

    入门和初级R语言使用者的界限??

    介绍 记得刚开始学编程的时候,总有同学问我怎么学写循环,一些人心中,入门和初级的R语言使用者的界限似乎就是能否熟练写循环或者函数,所以今天这个教程就是写的专门针对如何开始写循环。...从概念讲,循环是某些条件下重复执行一系列指令的一种方式。它们使您可以自动执行需要重复的代码部分。深入研究R中的编写循环之前,很多人告诉我应该避免使用R中的循环。为什么?那是因为R支持向量化。...简而言之,这R支持向量化可以加快计算速度。例如,写循环比函数(例如lapply和sapply)矢量化低。但是,作为R的初学者,对循环以及如何编写循环有一个基本的了解是很好的。...year,但实际这里可以使用任何变量。...如果i的值除以2时余数为零(这就是为什么我们使用模数操作数%%的原因),则无需输入if语句,而是执行print函数并返回。如果余数不为零,则if语句的计算结果为TRUE,然后输入条件。

    93820

    R语言中的循环函数(Grouping Function)

    R语言中有几个常用的函数,可以按组对数据进行处理,apply, lapply, sapply, tapply, mapply,等。这几个函数功能有些类似,下面介绍下这几个函数的用法。...Lapply 前面说到apply是对于matrix和array的,针对list,我们可以使用lapply函数。该函数接收list,返回的结果也是一个list。...其调用如下: Apply(数据,运算函数,函数的参数) 对于Data Frame来说,如果不同的列有不同的数据类型,不能转换成Matrix,但是却可以转换成List,然后使用lapply函数。...Sapply Sapply函数和Lapply函数很类似,也是对List进行处理,只是返回结果Sapply会根据结果的数据类型和结构,重新构建一个合理的数据类型返回。...Tapply 前面介绍的几个apply函数都是对整体数据进行处理,而tapply是对向量中的数据进行分组处理。

    1.5K20

    几种加快R语言运算的方法

    提升R代码运行速度并不需要很高级的优化技术, 例如代码并行化, 使用数据库, 使用c++等....实际, 通过简单的操作, 就能够是R的运算速度显著的加快, 下面介绍几种方法. 1, 向量化 R语言允许用户进行向量化编程, 这样速度更快....这种方法比较简单, 但是数据量大时, 会影响速度. 所以使用变量时, 提前声明变量的大小, 会提升速度 不预先分布内存 这个程序, 不知道dat的长度是多少, 因此是动态的内存结构....apply函数代替for循环 apply函数及其变种: lapply sapply tapply 如果各个迭代之间相互独立, 那么apply函数是可以代替for循环的 for循环 set.seed(123...matrix而不是data.table 矩阵运算时, 尽量转化为matrix格式 使用matrix dat = matrix(rnorm(1e4*1000),1e4,1000) dd = as.data.frame

    2.5K20
    领券