我已经使用R一段时间了,我已经意识到如果你可以附加data.frame中包含的描述数据会有很大的帮助,因为你可以在.Rdata文件中收集所有有用的研究信息.
我想添加我的数据帧信息,例如?iris显示的信息(描述虹膜数据帧中的数据)
但是我找不到办法做到这一点.
我已经检查了几个相关的问题,比如这个
我引用了最受好评的答案的特定部分
这取决于您想要做什么以及如何进一步处理数据.在任何情况下,只要您始终需要相同的数据集,从二进制R对象加载总是会更快.在这里极限速度是你的硬盘,而不是R的速度.二进制形式是工作空间中数据框的内部表示,因此不再需要转换
我真的这么认为.但是,生活就是在试验.我有一个包含igraph对象的1.22 GB文件.这就是说,我不认为我在这里找到的与对象类有关,主要是因为你甚至可以在调用"library"之前加载('file.RData').
这台服务器中的磁盘非常酷.因为你可以检查内存的阅读时间
user@machine data$ pv mygraph.RData > /dev/null
1.22GB 0:00:03 [ 384MB/s] [==================================>] 100% `
Run Code Online (Sandbox Code Playgroud)
但是,当我从R加载此数据时
>system.time(load('mygraph.RData'))
user system elapsed
178.533 16.490 202.662
Run Code Online (Sandbox Code Playgroud)
所以看起来加载*.RData文件比磁盘限制慢60倍,这应该意味着R实际上在"加载"时做了一些事情.
我有同样的感觉使用不同的R版本与不同的硬件,这只是这次我耐心做基准测试(主要是因为有这么酷的磁盘存储,负载实际需要多长时间是可怕的)
关于如何克服这个问题的任何想法?
经过回答的想法
save(g,file="test.RData",compress=F)
Run Code Online (Sandbox Code Playgroud)
现在该文件为3.1GB,之前为1.22GB.在我的情况下,加载解压缩速度要快一点(磁盘远远不是我的瓶颈)
> system.time(load('test.RData'))
user system elapsed
126.254 2.701 128.974
Run Code Online (Sandbox Code Playgroud)
将未压缩文件读取到内存大约需要12秒,因此我确认大部分时间都用于设置环境
我将回到RDS结果,听起来很有趣
正如我所承诺的那样
system.time(saveRDS(g,file="test2.RData",compress=F))
user system elapsed
7.714 2.820 18.112
Run Code Online (Sandbox Code Playgroud)
我得到一个3.1GB就像"保存"未压缩,虽然md5sum是不同的,可能是因为save还存储了对象名称
现在看...
> system.time(a<-readRDS('test2.RData'))
user system elapsed
41.902 2.166 44.077
Run Code Online (Sandbox Code Playgroud)
因此,结合两种想法(解压缩和RDS)的速度提高了5倍.谢谢你的贡献!
我的问题如下.我正在使用R/igraph处理大数据图.
我需要将clusters()$membership(即矢量)的输出转换为对值进行分组的列表.
示例:我有矢量(3,3,3,1,1,4,4)我需要一个具有以下结构的列表
l<-list()
l[["3"]]<-c(1,2,3)
l[["4"]]<-c(6,7)
l[["1"]]<-c(4,5)
Run Code Online (Sandbox Code Playgroud)
这就是maximal.cliques()函数输出的结构
我尝试在级别列表上使用lapply,然后使用它来查找某个值的索引.然而,这表现得非常糟糕.我正在处理180K元素的数据向量,其中可能有60K不同的级别.