我有一个data.table不是很大(2 GB)但由于某种原因write.csv需要很长时间才能写出来(我从未真正完成等待)并且似乎使用了大量的RAM来完成它.
我尝试将其转换data.table为a,data.frame尽管自从data.table扩展以来这不应该做任何事情data.frame.有没有人碰到这个?
更重要的是,如果你用Ctrl- 来阻止它C,R似乎没有给回记忆.
我有一些R脚本,我必须尽快在R中加载几个数据帧.这非常重要,因为读取数据是程序中最慢的部分.例如:从不同的数据帧绘图.我以sav(SPSS)格式获取数据,但我可以将其转换为建议的任何格式.不幸的是,合并数据帧不是一个选项.
什么是加载数据的最快方法?我在考虑以下几点:
read.spss.attr变量的任何自定义值(例如来自Spss导入文件的variable.labels)吗?或者这应该在一个单独的表中完成?欢迎任何其他想法.感谢您提前提出的每一个建议!
我根据你给出的答案在下面做了一个小实验,并且还添加了(24/01/2011)一个非常"hackish"但非常快速的解决方案,只从一个特殊的二进制文件中加载几个变量/列.后者似乎是我现在能想象的最快的方法,这就是为什么我编写了一个名为save的小包来处理这个功能(05/03/2011:ver.0.3).该套餐正在"重"开发,欢迎任何推荐!
在microbenchmark软件包的帮助下,我将很快发布一个具有准确基准测试结果的小插图.
我在R中有一个相当大的数据框,我想导出到SPSS.这个文件首先导致我尝试将其导入R的几个小时的麻烦,但是我read.fwf()使用选项comment.char="%"(文件中没有出现的字符)成功使用了fill= TRUE(它是一个固定宽度的ASCII文件,缺少某些行)所有变量,导致错误消息).
无论如何,我的数据框目前包括3,900个观察值和48个变量(所有字符).我可以通过将其分成4 x 1毫米集合df2 <- df[1:1000000,]后跟write.table(df2)等等来快速地将其写入文件,但是如果没有计算机锁定并且需要硬重置才能恢复,则无法在一次扫描中写入整个文件.
在听到关于R多年来不适合大型数据集的轶事故事后,这是我第一次遇到这类问题.我想知道是否有其他方法(将文件低级"直接"转储到磁盘?)或者是否有一些我不知道的包可以有效地处理这种类型的大文件的输出?
我有大数据集(但例如以下是小数据集).我可以拆分数据帧然后我想输出到与用于拆分的lavel相对应的多个文本文件.
mydata <- data.frame (var1 = rep(c("k", "l", "c"), each = 5), var2 = rnorm(5),
var3 = rnorm(5))
mydata
var1 var2 var3
1 k 0.5406022 0.3654706
2 k -0.6356879 -0.9160001
3 k 0.2946240 -0.1072241
4 k -0.2609121 0.1036626
5 k 0.6206579 0.6111655
6 l 0.5406022 0.3654706
7 l -0.6356879 -0.9160001
8 l 0.2946240 -0.1072241
9 l -0.2609121 0.1036626
10 l 0.6206579 0.6111655
11 c 0.5406022 0.3654706
12 c -0.6356879 -0.9160001
13 c 0.2946240 -0.1072241
14 c -0.2609121 0.1036626
15 c …Run Code Online (Sandbox Code Playgroud) 假设我在32 GB的服务器上有一个4GB的数据集.
我可以将所有内容读入R中,创建一个data.table全局变量,并让我的所有函数都将全局函数用作内存中的数据库.但是,当我退出R并重新启动时,我必须再次从磁盘读取它.即使使用智能磁盘缓存策略(保存/加载或R.cache),我也有10秒的延迟,因此获取该数据.复制该数据大约需要4秒.
有没有一种很好的方法可以将其缓存在内存中,以便在R会话退出后继续存在?
想到几件事,RServe,redis/Rredis,Memcache,多核...... Shiny-Server和Rstudio-Server似乎也有解决这个问题的方法.
但话说回来,似乎data.table可能提供此功能,因为它似乎无论如何都会将数据移出R的内存块.这将是理想的,因为它不需要任何数据复制,重组等.
更新:
我运行了一些更详细的测试,我同意下面的评论,我可能没有太多抱怨.
但是这里有一些其他人可能会觉得有用的数字.我有一个32GB的服务器.我创建了一个4GB大小的data.table.根据gc()并且还看顶部,它似乎使用了大约15GB的峰值内存,其中包括制作一份数据.我觉得这很好.
我用save()写入磁盘,删除了对象并使用load()重新制作它.这分别花了17秒和10秒.
我对R.cache包做了同样的事情,这实际上更慢了.23秒和14秒.
然而,这两个重载时间都非常快.load()方法给出了357 MB/s的传输速率.相比之下,副本需要4.6秒.这是一个虚拟服务器.不确定它具有什么类型的存储或读取速度受缓存影响的程度.
r ×5
data.table ×2
dataframe ×2
benchmarking ×1
csv ×1
export ×1
file-io ×1
load ×1
performance ×1
split ×1