【问题标题】:R bigmemory: how to access matrix/keep in shared memory after script got executedR bigmemory:脚本执行后如何访问矩阵/保存在共享内存中
【发布时间】:2022-01-03 01:32:46
【问题描述】:

我使用bigmemory 包将一个非常大的矩阵放入共享内存中(请参阅下面的脚本,以便其他 R 会话中的脚本可以并行访问它。

我现在想以非交互方式执行脚本。问题是,如果我使用Rscript 运行它,矩阵会在Rscript 进程结束后立即从共享内存中删除。我可以在脚本末尾添加Sys.sleep(99999),但我想知道是否有更好的方法来完成这个。有什么想法吗?

library(bigmemory)

m = read.big.matrix("matrix.txt", type='double', shared = TRUE, header = FALSE, sep = "\t")

sign = describe(m)
dput(sign, "matrix.signature")

【问题讨论】:

  • 我不确定您所说的“脚本执行后保留在共享内存中”的确切含义。以及“在脚本执行后保持会话活动”。
  • @F.Privé :你现在能更好地理解它吗?
  • 当您说要保留共享内存时,是不是因为您想使用这些数据运行许多脚本,而不必每次都将数据映射到磁盘上?
  • 我不确定您所说的“每次都在磁盘上映射数据”是什么意思,但是是的,我想使用在单独的 R 会话中运行的脚本访问共享内存中的数据。跨度>

标签: r shared-memory r-bigmemory


【解决方案1】:

如果您在磁盘上有描述符sign,那么您可以在另一个会话中使用attach.big.matrix()

m <- attach.big.matrix("matrix.signature")

【讨论】:

  • 问题是,如果其他会话停止,我将无法再通过 attach.big.matrix 访问矩阵,因为它已被删除。将矩阵放入共享内存后,如何保持其他会话处于活动状态?
  • 是的,你可以。 "matrix.signature" 是磁盘上文件的路径,其中包含重建 big.matrix 对象所需的信息(描述符)。
  • 如果共享内存中的对象不再存在,则描述符没有用。描述符基本上只是一个指向对象的指针。我正在寻求帮助如何将这个对象(即矩阵)保存在共享内存中。目前我看到的唯一解决方案是在交互式会话中从上面运行 read.big.matrix 脚本(并且不要关闭会话),或者如果我在使用 Rscript 运行它时添加 Sys.sleep(9999999) 之类的东西.
  • 我明白了。为什么不使用文件备份的 big.matrix?
  • 还没试过。你?性能与共享内存如何?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-17
  • 1970-01-01
  • 2021-11-26
  • 2012-12-14
  • 2019-03-04
  • 1970-01-01
  • 2021-05-11
相关资源
最近更新 更多