相关疑难解决方法(0)

R数据帧的实际限制

我一直在阅读read.table如何对大数据文件无效.R也不适用于大型数据集.所以我想知道在哪里可以找到实际限制和任何性能图表(1)读取各种尺寸的数据(2)处理不同大小的数据.

实际上,我想知道性能何时恶化以及何时遇到路障.对C++/MATLAB或其他语言的任何比较都会非常有用.最后如果Rcpp和RInside有任何特殊的性能比较,那就太棒了!

performance r dataframe rcpp

49
推荐指数
5
解决办法
6万
查看次数

数据表中的内存限制:不允许使用负长度向量

我有一个包含多个社交媒体用户和他/她的粉丝的数据表.原始数据表格式如下:

X.USERID FOLLOWERS
1081     4053807021,2476584389,4713715543, ...
Run Code Online (Sandbox Code Playgroud)

因此,每行包含一个用户以及他/她的ID和一个关注者矢量(用逗号分隔).总共有24,000个唯一身份用户ID和160,000,000个独立粉丝.我希望以下列格式转换原始表:

X.USERID          FOLLOWERS
1:     1081         4053807021
2:     1081         2476584389
3:     1081         4713715543
4:     1081          580410695
5:     1081         4827723557
6:     1081 704326016165142528
Run Code Online (Sandbox Code Playgroud)

为了获得这个数据表,我使用了以下代码行(假设我的原始数据表被称为dt):

uf <- dt[,list(FOLLOWERS = unlist(strsplit(x = FOLLOWERS, split= ','))), by = X.USERID]
Run Code Online (Sandbox Code Playgroud)

但是,当我在整个数据集上运行此代码时,我收到以下错误:

不允许负长度向量

根据这篇关于堆栈溢出的帖子(不正确使用set后data.table中的行数为负数),似乎我碰到了data.table中列的内存限制.作为一种解决方法,我以较小的块(每10,000个)运行代码,这似乎有效.

我的问题是:如果我改变我的代码,我可以防止这个错误发生或我是否碰到R的限制?

PS.我有一台140GB RAM的机器,所以物理内存空间应该不是问题.

> memory.limit()
[1] 147446
Run Code Online (Sandbox Code Playgroud)

r bigdata data.table

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

如何基于大数据框计算共现矩阵?

我想根据这里推荐的代码创建一个共现矩阵(另见下文)。它适用于我使用的大多数数据帧。但是,如果我使用data.table::melt...

negative length vectors are not allowed

...或稍后使用 base::crossprod

error in crossprod: attempt to make a table with >=2^31 elements

两者都与数据帧的大小有关。在第一种情况下,它与行数有关,而在后一种情况下,矩阵的大小超过了限制。

我知道关于第一个问题(解决方案data.table::melt)提出的[2] [3][4] ,以及对于第二个问题(base::crossprod通过)[5][6] ,和我见过[ 7]但我不确定如何使它们适合我的情况。我试图按 ID 将数据帧拆分为几个数据帧,合并它们并计算共现矩阵,但我刚刚产生了额外的错误消息(例如,无法分配大小为 17.8 GB 的向量)。

可重现的例子

我有一个由plyr::join它创建的组装数据框,看起来像这样(但是,当然,要大得多):

df <- data.frame(ID = c(1,2,3,20000), 
                  C1 = c("England", "England", "England", "China"),
                  C2 = c("England", "China", "China", "England"),
                  C5850 = c("England", "China", "China", "England"),
                  SC1 = c("FOO", "BAR", "EAT", …
Run Code Online (Sandbox Code Playgroud)

r large-data plyr dataframe data.table

5
推荐指数
0
解决办法
186
查看次数

Rcpp R向量大小限制(不允许负长度向量)

根据/sf/answers/3407347261//sf/answers/366400541/ R 向量仅限于 2^31 - 1 项。但是,我已经能够通过 Rcpp 在该数字的一半处触发“不允许负长度向量”错误(这应该是尝试分配过大向量的标志)。这一切都来自我尝试调试基于 Rcpp 的 R 包(https://github.com/tpq/propr/issues/13)。

library(Rcpp)

cppFunction("
IntegerVector test(int size) {
    int veclen = size * (size - 1) / 2;
    IntegerVector vec(veclen);
    return vec;
}
")

vec <- test(47000)
Error in test(47000) : negative length vectors are not allowed
Run Code Online (Sandbox Code Playgroud)

47000^2 / 2 几乎是 2^31 的一半。我在纯 R 中没有遇到这样的问题,vec <- 1:(47000*(47000-1)/2)运行得很好,所以 Rcpp 应该有一些特别的东西。

r rcpp

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

标签 统计

r ×4

data.table ×2

dataframe ×2

rcpp ×2

bigdata ×1

large-data ×1

performance ×1

plyr ×1