【问题标题】:Using the same object in different session在不同的会话中使用相同的对象
【发布时间】:2018-04-09 10:57:01
【问题描述】:

有没有办法在 R 中的多个会话之间共享一个 const 对象?

在我目前的情况下,我愿意运行 PAM 算法,为此它需要一个相异矩阵。在讨论中创建矩阵的过程——我的项目——需要我所有的随机存取存储器。但是,生成后它只需要 2Gb 的 RAM。我的电脑有 raw 8Gb 内存。

由于高维,算法收敛速度较慢,因此,我想并行运行多个函数。但是,我的计算机不处理另一个矩阵生成,但是由于该对象已经存在于另一个 session 中,我正在考虑是否有使用它的方法。

我希望它很清楚。如果不是,请留下评论,我将修改我的文字。提前谢谢你。

观察:

  • 我有 Windows 和 Ubuntu 操作系统
  • 我不确定 session 是否是正确的词

【问题讨论】:

  • AFAIK 这是不可能的,因为每个 R 会话都有自己的内存空间,您无法在外部访问它。
  • 我可能没抓住重点,但如果您需要并行运行多个函数,为什么不在单个会话中并行运行它们而不是在多个会话中运行它们?
  • 并行“workers”(R 进程)在那些worker 是派生进程时与主R 进程共享对象。例如 mclapply() 使用的分叉进程仅在 Unix 和 macOS 上可用。在 Windows 上,您只能使用在自己的进程中运行的工作人员(他们自己的“R 会话”)。因此,您需要使用parallel::mclapply()future::plan(multicore) 或类似名称。 (仅供参考,可能会消耗您的内存的分叉进程存在其他问题,例如垃圾收集,但仍应比单独的 R 会话更好)。

标签: r parallel-processing


【解决方案1】:

在 Ubuntu 上你可以使用这样的东西:

# generate 500 objects, divided into 4 clusters.
x <- rbind(cbind(rnorm(100,0,0.5), rnorm(100,0,0.5)),
           cbind(rnorm(150,5,0.5), rnorm(150,5,0.5)),
           cbind(rnorm(100,0,0.5), rnorm(100,5,0.5)),
           cbind(rnorm(150,5,0.5), rnorm(150,0,0.5)))
# generate dstance matrix
y <- dist(x)
# run four clusterings in parallel using forked processes
parallel::mclapply(1:4, function(k) cluster::pam(y, k)$medoids)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-30
    • 2012-08-13
    相关资源
    最近更新 更多