小编Avr*_*ham的帖子

无法在R中分配矢量并且有足够的可用内存

我正在尝试使用该data.table程序包在R 64位上加​​载大型CSV文件(226M行乘38列).磁盘上文件的大小约为27Gb.我在具有64GB RAM的服务器上执行此操作.我关闭了大部分其他内容并启动了一个全新的R/Rstudio会话,所以当我启动时,fread只使用了2Gb的内存.随着读取过程,我看到内存使用量攀升到大约45.6 Gb,然后我感到害怕Error: cannot allocate vector of size 1.7 Gb.但是,仍有超过18Gb可用.是否有可能在18Gb的RAM中没有一个连续的1.7Gb块?它是否与承诺的大小有关(我承认不完全理解),如果是这样,有没有办法最小化承诺的大小,以便留下足够的空间

该列表包括我想要汇总的一组用户的历史记录,并随着时间的推移汇总某些统计信息.我已经能够使用selectin 导入38列的子集fread,所以我不会完全丢失,但它确实意味着我需要使用其他变量,我需要选择,并且可能最终会遇到同样的错误.

对于我的设置,有没有其他方法可以将整个数据集放入内存,或者我是否需要继续只导入子集或移动到大数据友好平台?

谢谢.

读取之前的内存使用情况

读取前的内存使用情况

失败时的内存使用情况

内存使用失败

会话信息

R version 3.3.0 Patched (2016-05-11 r70599)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows Server >= 2012 x64 (build 9200)

locale:
[1] LC_COLLATE=English_United States.1252  LC_CTYPE=English_United States.1252   
[3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C                          
[5] LC_TIME=English_United States.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] data.table_1.9.6

loaded via a …
Run Code Online (Sandbox Code Playgroud)

r out-of-memory data.table

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

如何在R包加载时清晰地定义一组变量并在卸载时清除它们?

我希望在包加载时定义一组颜色,并在包分离时清除.

我提出的似乎有用的内容显示在以下玩具示例中,该示例依赖于深度分配(我知道这是邪恶的)

.onLoad <- function(libname, pkgname) {

}

.registerColors <- function(){
  C.1 <<- c("#FF0000FF", "#80FF00FF", "#00FFFFFF", "#8000FFFF")
  C.2 <<- c("#00AAFFFF", "#0000FFFF", "#AA00FFFF", "#FF00AAFF")
}

.onUnload <- function(libpath){
}
.onAttach <- function(libname, pkgname) {
  .registerColors()
  packageStartupMessage("Welcome to XYZ")
}

.onDetach <- function(libname, pkgname) {
  rm(C.1, C.2, pos = 1)
  packageStartupMessage("Buh-bye")
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,情节(seq(1:4,col = C.1)有效.是否有更好或更优雅或更少潜在破坏性的方式来实现它?

r r-package

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

初始化参数序列和参数数组之间有区别吗?

如果我要使用嵌套括号计算多项式,那么单独声明每个常量并将它们声明为数组之间是否存在差异?

例如,两者之间是否存在差异

real(kind = c_double), parameter  :: &
            P0 =  .5,     &
            P1 =  .8,     &
            P2 = -.1,     &
            P3 = -.7,     &
            P4 = -.4,     &
            P5 = -.6, &
            P6 = -.2
Run Code Online (Sandbox Code Playgroud)

并计算

x = ((((((P6 * a + P5) * a + P4) * a + P3) * a + P2) * a + P1) * a + P0)
Run Code Online (Sandbox Code Playgroud)

要么

real(kind = c_double), parameter, dimension(7)  :: P = &
[.5, .8, -.1, -.7, -.4, -.6, -.2] …
Run Code Online (Sandbox Code Playgroud)

arrays fortran

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

标签 统计

r ×2

arrays ×1

data.table ×1

fortran ×1

out-of-memory ×1

r-package ×1