R 使数据帧对多个请求保持不变

R 使数据帧对多个请求保持不变,r,data-science,R,Data Science,我有一个大型稀疏矩阵保存在RData文件中。访问此矩阵的脚本将从对RScript的控制台调用开始。在脚本的每次调用中加载此矩阵需要大量的时间和资源。是否有一种方法可以将矩阵保存在内存中,以便来自控制台的多个调用可以使用矩阵,而不必每次都将其作为对象加载 试试“bigmatrix”软件包。基本上,通过调用“big.matrix()”创建一个矩阵,然后通过调用“descripe()”获得该矩阵的挂钩。然后可以使用钩子的内容使用“attach.big.matrix()”将已加载的矩阵附加到另一个进程中

我有一个大型稀疏矩阵保存在RData文件中。访问此矩阵的脚本将从对RScript的控制台调用开始。在脚本的每次调用中加载此矩阵需要大量的时间和资源。是否有一种方法可以将矩阵保存在内存中,以便来自控制台的多个调用可以使用矩阵,而不必每次都将其作为对象加载

试试“bigmatrix”软件包。基本上,通过调用“big.matrix()”创建一个矩阵,然后通过调用“descripe()”获得该矩阵的挂钩。然后可以使用钩子的内容使用“attach.big.matrix()”将已加载的矩阵附加到另一个进程中

编辑:示例:

开始2个R会话,1和2

关于第1次会议:
require(大内存)

system.time(M共享大数据的问题不应该从根本上引入一种可以使用内存数据库之类的数据共享的体系结构吗?

有趣的方法。但是它如何以快速加载的方式将矩阵的“状态”从一个脚本请求加载到另一个脚本请求?保存“状态”的一种方法是保存钩子(来自“descripe()”的结果)到一个文件,当有另一个调用时将读取该文件。
require(bigmemory)
system.time(M <- matrix(rnorm(1e8), 1e4)) # ~9"
format(object.size(M), "Mb") # ~762Mb
system.time(M <- as.big.matrix(M)) # ~ 3"

hook = describe(M)
saveRDS(hook, "shared-matrix-hook.rds")
M[1:3,1:3]
require(bigmemory)
system.time(hook <- readRDS("shared-matrix-hook.rds")) # 0.001"

system.time(Mshared <- attach.big.matrix(hook)) # 0.002"

Mshared[1:3,1:3] # shows the same as session 1 did
Mshared[2,2] = 0 # check on session 1 that this change is present there