【问题标题】:Running jobs in background in R在 R 中在后台运行作业
【发布时间】:2013-08-22 10:25:34
【问题描述】:

我正在使用 250 x 250 矩阵。但是,计算它需要大量时间。至少需要一个小时。

我是否可以将这个矩阵存储在 R 的内存中,这样每次我打开 R 时,它就已经存在了。

理想情况下,我想知道是否可以在 R 中在后台运行作业,这样我就不必等待一个小时来取出矩阵并能够使用它。

【问题讨论】:

  • 或者查看 R 中工作空间的想法。
  • 对不起,你能说得更清楚一点吗,什么需要一个小时??? 250x250 矩阵不是我每天都在使用 3,000,000x20 表。启动时没有 pb 加载 250x250,应该是瞬时的
  • @statquant,矩阵的大小无关紧要。重要的是计算其中的每个值需要多长时间...
  • @flodel,那为什么还要提到它的大小呢? OP提到“将这个矩阵存储在内存中”,他想要的只是存储它只是一个微不足道的write.csv,一旦矩阵在那里,read.csv 在每次启动时,但他提到他想要一份后台工作......这完全不清楚
  • 知道矩阵很小使得写入/读取文件成为一个非常可行的解决方案,所以我认为他提到大小是一件好事......

标签: r


【解决方案1】:

1) 关闭R时可以保存R的工作区。通常R会询问“保存工作区图像?”当你关闭它时。如果您回答“是”,它会将工作区保存在名为“.Rdata”的文件中,并在启动新的 R 实例时加载它。

2) 更好的选择(更安全)是显式保存矩阵。有几种选择如何完成。一种选择是将其保存为 Rdata 文件:

save(m, file = "matrix.Rdata")

m 是您的矩阵。

您可以随时加载矩阵

load("matrix.Rdata")

如果你在同一个工作目录中。

3) R 没有后台计算这样的选项。但是您可以打开多个 R 实例。在一个实例上进行计算,在另一个实例上做其他事情。

【讨论】:

    【解决方案2】:

    当你计算它时将它输出到一个文件中,然后在每次打开 R 时解析该文件。为自己编写一个 computeMatrix() 函数或脚本来生成一个以合理格式存储的矩阵的文件。还要自己编写一个 loadMatrix() 函数或脚本来读取该文件并将矩阵加载到内存中以供使用,然后在每次启动 R 并想要使用矩阵时调用或运行 loadMatrix。

    就在后台运行 R 作业而言,您可以使用语法“R CMD BATCH scriptName”从命令行运行 R 脚本,并将 scriptName 替换为您的脚本名称。

    【讨论】:

    • 你能给我一些示例代码吗?因为我明白你的意思,但我不知道该怎么做
    • 代码取决于矩阵的形式。如果它只是一个数字矩阵,我个人会输出为 csv 格式,然后使用 read.csv() 函数将其重新加载。矩阵中的每个元素是什么?
    • writeMatrix <- function(dat, file) write.csv(dat, file); readMatrix <- function(file) data.matrix(read.csv(file, row.names = 1))
    • 澄清一下,“dat”是所需的矩阵,对吗?还是必须先将其转换为数据框,然后再将其写入文件?
    • 是的。 astrostatistics.psu.edu/datasets/R/html/base/html/… 获取您可能想要或不想要的额外选项。
    【解决方案3】:

    最好使用 ff 包并将矩阵保存为 ff 对象。这意味着实际的矩阵将以有效的方式保存在磁盘上,然后当您启动新的 R 会话时,您可以指向同一个文件,而无需将整个矩阵加载到内存中。当您需要矩阵的一部分时,只会加载您需要的部分,因此速度会更快。即使您需要将整个矩阵加载到内存中,它的加载速度也应该比读取文本文件快。

    【讨论】:

    • 矩阵在这种情况下很小,为 250*250。我没有理由使用ff
    • @djhurio,我同意对于所述情况 250x250 很小,并且提到的其他方法可以正常工作,但是如果原始海报或其他读者扩展到一个非常大的矩阵怎么办? ff 解决方案将更好地扩展。
    • 是的,但无论如何它超出了问题的范围。
    • 我也经常使用这种方法,以及并行包中的并行功能。当你这样做时,将数据复制到并行工作人员只会复制 ff 对象的虚拟部分 - 这比复制传递给并行函数的所有数据要快得多。
    猜你喜欢
    • 1970-01-01
    • 2015-03-29
    • 2011-09-10
    • 2013-09-24
    • 2017-05-23
    • 2012-11-26
    • 1970-01-01
    • 2011-06-17
    • 2012-01-13
    相关资源
    最近更新 更多