为什么在 data.frame 中预先指定类型会比较慢?

2024-05-30

我预先分配了一个大 data.frame 以便稍后填写,我通常这样做NA是这样的:

n <- 1e6
a <- data.frame(c1 = 1:n, c2 = NA, c3 = NA)

我想知道如果我预先指定数据类型是否会让事情变得更快,所以我测试了

f1 <- function() {
    a <- data.frame(c1 = 1:n, c2 = NA, c3 = NA)
    a$c2 <- 1:n
    a$c3 <- sample(LETTERS, size= n, replace = TRUE)
}

f2 <- function() {
    b <- data.frame(c1 = 1:n, c2 = numeric(n), c3 = character(n))
    b$c2 <- 1:n
    b$c3 <- sample(LETTERS, size= n, replace = TRUE)
}

> system.time(f1())
   user  system elapsed 
  0.219   0.042   0.260 
> system.time(f2())
   user  system elapsed 
  1.018   0.052   1.072 

所以实际上慢得多!我也再次尝试使用因子列,差异并不接近 2 倍而不是 4 倍,但我很好奇为什么这会更慢,并且想知道使用数据类型而不是数据类型进行初始化是否合适NA's.

--

编辑:Flodel 指出 1:n 是整数,而不是数字。经过修正后,运行时间几乎相同;当然,错误地指定数据类型并稍后更改它会很糟糕!


将任何数据分配给大型数据框都需要时间。如果您要在向量中一次性分配所有数据(正如您应该的那样),那么much更快地根本不分配原始定义中的 c2 和 c3 列。例如:

f3 <- function() {
    c <- data.frame(c1 = 1:n)
    c$c2 <- 1:n
    c$c3 <- sample(LETTERS, size= n, replace = TRUE)
}

print(system.time(f1()))
#   user  system elapsed 
#  0.194   0.023   0.216 
print(system.time(f2()))
#   user  system elapsed 
#  0.336   0.037   0.374 
print(system.time(f3()))
#   user  system elapsed 
#  0.057   0.007   0.063 

这样做的原因是,当您预先分配时,长度的列n被建造。例如

str(data.frame(x=1:2, y = character(2)))
## 'data.frame':    2 obs. of  2 variables:
## $ x: int  1 2
## $ y: Factor w/ 1 level "": 1 1

请注意,character列已转换为factor这会比设置慢stringsAsFactors = F.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么在 data.frame 中预先指定类型会比较慢? 的相关文章

  • 从 r 中的数据帧中删除每第 n 列

    我试图通过删除每第三列来减小数据框的大小 这是我的示例数据框 example data frame x c 1 2 3 4 y c 1 2 3 4 z c 1 2 3 4 w c 1 2 3 4 p c 1 2 3 4 q c 1 2 3
  • 将 YAML 文件作为常量加载到 Rails 控制器中是否有效?

    我有几个大型数组需要可用于特定视图 目前 我将它们存储在 YAML 文件中并加载到控制器常量中 如下所示 我假设当 Rails 在环境设置期间加载文件时 这个常量存储在内存中 但我偏执地想知道每次访问该控制器时是否都在访问文件系统 谁能建议
  • R:在 glm() 中的逻辑回归中预测 (0,1)

    我正在尝试在二进制 Logit 模型中模拟 假设 情况 我正在估计通过测试的概率 考虑到测试的难度级别 1 最简单 5 最难 并以性别为控制 数据是here http dl dropbox com u 1791181 bayesglm cs
  • 哪个 SQL 语句更快? (有与在哪里......)

    SELECT NR DZIALU COUNT NR DZIALU AS LICZ PRAC DZIALU FROM PRACOWNICY GROUP BY NR DZIALU HAVING NR DZIALU 30 or SELECT NR
  • Python 常见问题解答:“异常有多快?”

    我只是在看Python常见问题解答 因为它在另一个问题中提到了 以前从未真正详细地看过它 我发现这个问题 http docs python org 3 faq design html how fast are exceptions 异常有多
  • 使用 Javascript 或 jQuery 按第一列快速对表格进行排序

    我有一个动态填充的表FullCalendar 问题是FullCalendar不关心其原始顺序 该表如下所示 table thead tr th th th Date th th hours th tr thead tbody tr td c
  • 在 Scala Spark 和 PySpark 之间传递 SparkSession

    我的要求是从现有的 PySpark 程序调用 Spark Scala 函数 将 PySpark 程序中创建的 SparkSession 传递给 Scala 函数的最佳方法是什么 我将 scala jar 传递给 Pyspark 如下所示 s
  • 按组连接/粘贴列并添加到原始数据

    我有一个名称数据框 名称 按 部门 分组 Dept Date Name 30 07 DEC 02 Raphaely 30 18 MAY 03 Khoo 40 07 JUN 02 Mavris 50 01 MAY 03 Kaufling 50
  • STL bitset::count() 方法的性能如何?

    我四处搜寻 找不到 bitset count 的性能时间规范 有谁知道它是什么 O n 或更好 以及在哪里可以找到它 EDIT我所说的STL仅指标准模板库 我在我的计算机上读取了这个文件 C cygwin lib gcc i686 pc c
  • 使用 R 并行处理 XML 节点

    我正在尝试与 R 并行处理 XML 文档xml2包装和foreach功能 但我收到 node attrs x node nsMap ns 中的错误 外部指针无效 尝试导出树集群导出 示例代码 library xml2 library for
  • Java 与 C++ - 光线追踪

    我用 Java 创建了简单的光线追踪器作为一个业余爱好项目 但是它很慢 虽然速度不是特别慢 但还是很慢 我想知道使用 C 或 C 等较低级语言是否可以获得任何性能提升 或者差异可以忽略不计 我应该坚持改进 我的 算法吗 我认为这个问题的答案
  • R 数据框中的重复行

    我正在尝试使用下面的代码复制数据框中的行 但是 我发现它很慢 duprow df 1 for i in 1 2000 print i df rbind df duprow 有更快的方法吗 您可以使用rep 例如对于数据框第 1 行的 5 个
  • 通过位屏蔽查找数据间隙

    我面临着在数字序列中查找给定长度的不连续性 间隙 的问题 因此 例如 给定 1 2 3 7 8 9 10 和一个间隙length 3 我会找到 4 5 6 如果间隙是length 4 我什么也找不到 当然 真正的序列要长得多 我在很多帖子中
  • 对于 X 中的每个元素,找到最大的索引,而不会超出 Y 中的范围

    我正在寻找一种方法来提高以下算法的性能 给定两个数组 X 和 Y 对于 X 的每个元素 找到 Y 中不超过 X 中元素值的最大值的索引 可以安全地假设 X 和 Y 是单调递增 已排序 并且 Y 1 小于每个X 中的值 而且 X 通常比 Y
  • 如何在R中绘制堆积柱形图?

    有谁知道如何使用 R 绘制由超过 1 个变量堆叠的列的直方图 就像excel中的 堆积柱形图 一样 谢谢你 我假设您确实想要一个条形图而不是直方图 在这种情况下 barplot从标准图形或barchart格子包中的两者都可以做到 或者使用
  • 在子目录中构建共享库

    我正在尝试构建一个使用一些 C 代码的 R 包 我有一个编译为可执行文件的 C 库 可以从命令行调用 有一个与之关联的 Makefile 我正在尝试获取信息here http cran r project org doc manuals R
  • 如何为 R 中接下来的 2 个单元格复制相同的列值[重复]

    这个问题在这里已经有答案了 我正在尝试使用 R 为列中接下来的 2 个单元格复制相同的列值 我有以下形式的数据框 Time World Cate Data 1994 Africa A 12 1994 B 17 1994 C 22 1994
  • 为什么 NaN^0 == 1

    受到早期高尔夫代码的提示 为什么会 gt NaN 0 1 1 这非常有道理NA 0为 1 因为NA缺少数据 并且any数字提高到 0 将得到 1 包括 Inf and Inf 然而NaN应该代表非数字 那么为什么会这样呢 当帮助页面出现时
  • Scala 不可变 Map 速度慢

    当我创建地图时 我有一段代码 val map gtfLineArr 8 split map split collect case Array k v gt k v toMap 然后我使用这张地图来创建我的对象 case class MyOb
  • 为什么变量 1 += 变量 2 比变量 1 = 变量 1 + 变量 2 快得多?

    我继承了一些 Python 代码 用于创建巨大的表 最多 19 列宽 5000 行 花了九秒用于在屏幕上绘制表格 我注意到每一行都是使用以下代码添加的 sTable sTable n GetRow where sTable是一个字符串 我将

随机推荐

  • nltk 标记化和缩写

    我用 nltk 对文本进行标记 只是将句子输入到 wordpunct tokenizer 中 这会拆分缩写 例如 don t 到 don t 但我想将它们保留为一个单词 我正在改进我的方法 以实现更精确的文本标记化 因此我需要更深入地研究
  • 使用批处理文件挂载 .iso 文件 win windows 8 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有一个游戏 已备份到 iso 文件 笔记本电脑中的磁盘驱动器很吵 并且希望从单个快捷方式运行它 而不必每次都挂载 iso 文件 我运行
  • 如何登录Oracle数据库?

    我对 Oracle 数据库中常用的日志记录方法感兴趣 我们的方法如下 我们为要记录的表创建一个日志表 日志表包含原始表的所有列以及一些特殊字段 包括时间戳 修改类型 插入 更新 删除 修改者的 id 原始表上的触发器为每次插入和删除创建一个
  • 在没有 ODBC 的情况下从 Java 操作 Access 数据库

    我想从我的 Java 项目操作 Microsoft Access 数据库 accdb 或 mdb 文件 我不想使用 Microsoft 的 JDBC ODBC Bridge 和 Access ODBC 驱动程序 因为 JDBC ODBC 桥
  • Asp.net 动态验证器在 Chrome 或 Safari 中不起作用

    好的 我正在动态创建 Asp net 验证控件并将它们插入到更新面板中 验证在 IE 和 Firefox 中有效 但在 Chrome 或 Safari 中无效 这是 aspx 文件 不要问我为什么不使用按钮服务器控件
  • 如何将 JSON 文本转换为 PHP 关联数组

    我将以下 JSON 对象存储在文本文件 data txt 中 player black time 0 from 2c to 3d 我使用 php 阅读 问题 有没有简单的方法可以转换 data到 PHP 关联数组 我尝试过使用json de
  • C# 中的快速字符串解析

    在 C 中解析字符串最快的方法是什么 目前我只是使用字符串索引 string index 并且代码运行合理 但我忍不住认为索引访问器所做的连续范围检查必须添加一些东西 所以 我想知道我应该考虑哪些技术来增强它 这些是我最初的想法 问题 使用
  • 打开脚本任务时 SSIS 丢失文件引用

    我们使用自定义审核程序集 C 在脚本任务中记录 SSIS 中的多种操作 我们将在 GAC 中构建自定义程序集 用于运行时 并发布到 IDE VS2008 的公共程序集区域以供设计时文件引用 后构建完成后 自定义程序集可在运行时使用 并可在文
  • IIS 7.0和win2k8中有多少个不同的地方需要设置日期格式

    我正在尝试使用 win2k8 将旧的经典 asp 应用程序迁移到 IIS 7 0 如果可以的话 我绝对不想更改旧代码 我在日期格式的自定义区域选项中设置了日期格式 在控制面板中的区域和语言选项中将其更改为 dd MMM yy 我仍然收到 C
  • 为什么 GCC 在堆栈上压入额外的返回地址?

    我目前正在学习汇编的基础知识 在查看 GCC 6 1 1 生成的指令时遇到了一些奇怪的情况 这是来源 include
  • 如何使用 monolog ElasticSearchHandler 登录 Laravel 应用程序

    Monolog 包含弹性搜索处理程序和格式化程序 但它作为自定义通道对 Laravel 的实现并不像 Laravel 文档网站上描述的那么简单 以下是如何执行此操作的简要分步说明 为您的弹性搜索日志记录创建一个配置文件 config ela
  • kubectl:在 WSL 终端中找不到

    我按照以下说明在 Windows10 上安装了 WSL2 https learn microsoft com en us windows wsl install win10 https learn microsoft com en us w
  • 使用 Crypto++ 和 .NET 的 CFB 模式下的 TripleDES

    我正在尝试使用 TripleDES 使用 C 应用程序获得相同的结果 该应用程序具有Crypto https www cryptopp com 和 NET应用程序使用三重DESCryptoServiceProvider https msdn
  • 如何找到在SQL Server中注册的程序集?

    我在 SQL Server 中注册了一个程序集 CREATE ASSEMBLY CLRFunctions AUTHORIZATION dbo FROM 0x4D5A90000300000 WITH PERMISSION SET SAFE 我
  • 频繁插入已排序的集合

    我已经对集合 列表 进行了排序 并且我需要始终保持其排序 我目前在我的集合上使用 List BinarySearch 然后在正确的位置插入元素 我也尝试过在每次插入后对列表进行排序 但性能不可接受 有没有一种解决方案可以提供更好的性能 也许
  • 什么是 Android DecorView?

    http developer android com reference android view Window html getDecorView http developer android com reference android
  • 如何修复 Mapbox GL 中的画布大小?

    我正在使用 Mapbox GL 显示地图并从其中心裁剪固定大小的图像 它非常适合我设计的特定分辨率 1920x1080 但是当我开始使页面响应时 地图样式width and height变化了 画布尺寸也开始变化了 因此 当我裁剪图像时 大
  • 列出 J 中数字的数字

    我使用的编程语言 J 我想将一个数字的所有数字放入一个列表中 From 12345 to 1 2 3 4 5 我能做些什么 我写这个的方式是 10 1 我们可以看到它与这句话的使用 10 1 123456789 1 2 3 4 5 6 7
  • 亚马逊 CloudFront 延迟

    我正在为我正在开发的 Web 应用程序尝试使用 AWS S3 和 CloudFront 在应用程序中 我允许用户将文件上传到 S3 存储桶 使用 AWS SDK 并通过 CloudFront CDN 提供该文件 但问题是 即使文件已上传并在
  • 为什么在 data.frame 中预先指定类型会比较慢?

    我预先分配了一个大 data frame 以便稍后填写 我通常这样做NA是这样的 n lt 1e6 a lt data frame c1 1 n c2 NA c3 NA 我想知道如果我预先指定数据类型是否会让事情变得更快 所以我测试了 f1