相关疑难解决方法(0)

快速读取非常大的表作为数据帧

我有非常大的表(3000万行),我想加载为R中的数据帧 read.table()有很多方便的功能,但似乎实现中有很多逻辑会减慢速度.在我的情况下,我假设我提前知道列的类型,表不包含任何列标题或行名称,并且没有任何我必须担心的病态字符.

我知道在表格中阅读作为列表使用scan()可能非常快,例如:

datalist <- scan('myfile',sep='\t',list(url='',popularity=0,mintime=0,maxtime=0)))
Run Code Online (Sandbox Code Playgroud)

但是我将此转换为数据帧的一些尝试似乎将上述性能降低了6倍:

df <- as.data.frame(scan('myfile',sep='\t',list(url='',popularity=0,mintime=0,maxtime=0))))
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法呢?或者很可能完全不同的方法来解决问题?

import r dataframe r-faq

489
推荐指数
9
解决办法
19万
查看次数

修剪一个巨大的(3.5 GB)csv文件以读入R

所以我有一个数据文件(分号分隔),它有很多细节和不完整的行(导致Access和SQL扼流).它的县级数据集分为段,子段和子子段(总共约200个因子),为期40年.简而言之,它是巨大的,如果我试着简单地阅读它,它就不适应内存.

所以我的问题是,鉴于我想要所有的县,但只有一年(而且只是最高级别的细分......最终导致大约100,000行),最好的方法是什么汇总到R?

目前我正试图用Python来消除不相关的年份,通过一次读取和操作一行来绕过文件大小限制,但我更喜欢只有R的解决方案(CRAN包可以).有没有类似的方法在R中一次读取一个文件?

任何想法将不胜感激.

更新:

  • 约束
    • 需要使用我的机器,所以没有EC2实例
    • 仅作为R-only.在这种情况下速度和资源不是问题...只要我的机器不爆炸...
    • 如下所示,数据包含混合类型,我需要稍后进行操作
  • 数据
    • 数据为3.5GB,大约850万行和17列
    • 几千行(~2k)格式错误,只有一列而不是17列
      • 这些完全不重要,可以放弃
    • 我只需要这个文件中的~10,000行(见下文)

数据示例:

County; State; Year; Quarter; Segment; Sub-Segment; Sub-Sub-Segment; GDP; ...
Ada County;NC;2009;4;FIRE;Financial;Banks;80.1; ...
Ada County;NC;2010;1;FIRE;Financial;Banks;82.5; ...
NC  [Malformed row]
[8.5 Mill rows]
Run Code Online (Sandbox Code Playgroud)

我想砍掉一些列并从40个可用年份中挑选两个(2009-2010从1980年到2020年),这样数据可以适用于R:

County; State; Year; Quarter; Segment; GDP; ...
Ada County;NC;2009;4;FIRE;80.1; ...
Ada County;NC;2010;1;FIRE;82.5; ...
[~200,000 rows]
Run Code Online (Sandbox Code Playgroud)

结果:

在修改了所有建议后,我认为JD和Marek建议的readLines效果最好.我给了Marek支票,因为他提供了一个示例实施.

我在这里为我的最终答案复制了一个略微改编的Marek实现版本,使用strsplit和cat来保留我想要的列.

还应当指出,这是MUCH比Python效率较低......在,巨蟒通过要吃掉5分钟3.5GB文件,而R取约60 ...但如果你只为R,那么这是罚单.

## Open a connection separately to hold the cursor position
file.in <- file('bad_data.txt', 'rt')
file.out <- file('chopped_data.txt', 'wt')
line …
Run Code Online (Sandbox Code Playgroud)

csv r

86
推荐指数
7
解决办法
2万
查看次数

如何在R中设置max ppsize?

我在R中遇到一个错误:

> Error: protect(): protection stack overflow
Run Code Online (Sandbox Code Playgroud)

我通过谷歌搜索了解到我需要增加:

> --max-ppsize
Run Code Online (Sandbox Code Playgroud)

R-手册:内存

这只能在启动R时设置,所以我在命令提示符下写下以下内容:

C:\Program Files\RStudio\bin\rstudio.exe --max-ppsize=5000000
Run Code Online (Sandbox Code Playgroud)

错误仍然存​​在.我正在运行1500R x 26000C数据集.

我该如何解决这个问题?


编辑:

问题出现在标准的SVM()函数中,我传递的大小为600R x 26.000C的数据集.当数据集为600R x 12.00C时,不会发生这种情况.

> model <- svm(TARGET ~ ., data = ds, type = "C-classification", kernel "linear", scale = TRUE, cost = c, cross = k)
Run Code Online (Sandbox Code Playgroud)

r

9
推荐指数
2
解决办法
1万
查看次数

了解R中的变量范围

如何在以下代码段中修改vairable'loco'的值:

poco <- function() {

func <- function(x) {
    print(loco)
    loco <- loco+x
}

loco <- 123
func(1)
func(2)
}
Run Code Online (Sandbox Code Playgroud)

此函数给出以下结果:

> poco()
[1] 123
[1] 123
Run Code Online (Sandbox Code Playgroud)

environment scope r environment-variables

2
推荐指数
2
解决办法
157
查看次数

R,RAM数量以及避免内存错误的特定限制

我已经阅读了有关R的各种大数据包.许多似乎可行,但至少我理解这个问题,我喜欢用于常见模型的许多软件包都不能与推荐的大数据包一起使用(对于例如,我使用lme4,VGAM和其他相当常见的各种回归分析软件包,这些软件包似乎与各种大数据包(如ff等)不太匹配.

我最近尝试使用VGAM使用一般社会调查的数据来做多元模型.当我抛出一些模型来运行,这些模型占了多年来受访者的聚类以及其他控件的列表时,我开始点击整个"无法分配大小yadda yadda的矢量......"我尝试了各种推荐项目,如作为清除内存并尽可能使用矩阵没有好的效果.我倾向于增加机器上的内存(实际上只是购买一台内存更多的新机器),但是我想知道在新机器上放弃1500美元之前是否能解决我的问题,特别是这仅供我个人使用,我将全部由我的研究生预算资助.

目前我正在运行一台带有16GB RAM,R 3.0.2的Windows 8机器,我使用的所有软件包都已更新到最新版本.我通常使用的数据集最多可达100,000个个案/受访者.就分析而言,我可能需要具有多行的矩阵和/或数据帧,例如我使用15个变量,这些变量具有多个级别的因子之间的相互作用,或者如果我需要在矩阵中为每个100,000个行中包含多行基于每个受访者对每个类别的DV进行整形的情况.对于某些社会科学工作而言,这可能是一个很大的影响,但我觉得在宏观方案中,就数据分析而言,我的要求实际上并不是那么重要.我相信很多R用户对更大的数据做了更强烈的分析.

所以,我想我的问题是这个 - 考虑到我通常使用的数据大小和分析类型,什么是舒适的RAM量以避免内存错误和/或必须使用特殊包来处理大小数据/进程我正在运行?例如,我正在关注一台运行32GB RAM的机器.会削减吗?我应该使用64GB内存吗?或者我真的需要咬紧牙关,可以这么说,并开始学习使用大数据包R或者只是找到不同的统计数据包或学习更强烈的编程语言(甚至不确定那将是什么,Python, C++ ??).从长远来看,后一种选择当然是好的,但目前对我来说相当禁止.我在几个项目的中游,我遇到类似的问题,没有时间在截止日期前一起建立新的语言技能.

尽可能具体 - 在具有16GB,32GB和64GB RAM的优秀机器上,64位R的最大容量是多少?我四处搜索,并没有找到明确的答案,我可以用它来衡量我的个人需求.

memory memory-management r

1
推荐指数
1
解决办法
5763
查看次数