Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R中后台运行作业_R - Fatal编程技术网

在R中后台运行作业

在R中后台运行作业,r,R,我正在使用一个250乘250的矩阵。然而,计算这个需要花费大量的时间。至少需要一个小时 有没有可能我可以把这个矩阵存储在R的内存中,这样每次我打开R,它就已经在那里了 理想情况下,我想知道是否有可能在R的后台运行一个作业,这样我就不必等待一个小时才能得到矩阵,并能够处理它 有帮助的方法是在计算完后将其输出到文件中,然后每次打开R时都解析该文件。编写computeMatrix()函数或脚本,以合理的格式存储矩阵,生成一个文件。还要编写一个loadMatrix()函数或脚本,读入该文件并将该矩阵加载

我正在使用一个250乘250的矩阵。然而,计算这个需要花费大量的时间。至少需要一个小时

有没有可能我可以把这个矩阵存储在R的内存中,这样每次我打开R,它就已经在那里了


理想情况下,我想知道是否有可能在R的后台运行一个作业,这样我就不必等待一个小时才能得到矩阵,并能够处理它

有帮助的方法是在计算完后将其输出到文件中,然后每次打开R时都解析该文件。编写computeMatrix()函数或脚本,以合理的格式存储矩阵,生成一个文件。还要编写一个loadMatrix()函数或脚本,读入该文件并将该矩阵加载到内存中以供使用,然后在每次启动R并希望使用该矩阵时调用或运行loadMatrix

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

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

2) 更好的选择(更安全)是显式保存矩阵。有几种方法可供选择。其中一个选项是将其另存为Rdata文件:

save(m, file = "matrix.Rdata")
其中
m
是矩阵

您可以随时使用

load("matrix.Rdata")
如果您在同一工作目录上


3) R没有后台计算这样的选项,但您可以打开多个R实例。在一个实例中执行计算,在另一个实例中执行其他操作。

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

或者检查R中的工作空间概念。对不起,您能更明确地说,什么需要一个小时???250x250矩阵算不了什么,我每天都在处理300000x20表。启动时没有pb加载250x250,应instantaneous@statquant,矩阵的大小是无关的。重要的是计算其中每个值需要多长时间…@flodel,那么为什么要提到它的大小呢?OP提到“将此矩阵存储在内存中”他想要的只是存储,一旦矩阵存在并且每次启动时都读取
read.csv
,这只是一个微不足道的
write.csv
,但他提到他想要一份后台工作。。。这是完全不清楚的知道矩阵很小,使得写入/读取文件成为一个非常可行的解决方案,所以我认为他提到的大小是一件好事…你能给我一些示例代码吗?因为我理解你的意思,但我不知道怎么做。代码取决于你矩阵的形式。如果它只是一个数字矩阵,我个人会将其输出为csv格式,然后使用read.csv()函数将其重新加载。矩阵中的每个元素是什么?
writeMatrix为了澄清,“dat”是所需的矩阵,对吗?或者在将其写入文件之前必须先将其转换为数据帧吗?是的。对于额外选项,您可能需要也可能不需要。在本例中,矩阵很小,为250*250。我不认为有理由使用
ff
@djhurio,我同意对于所述情况,250x250很小,并且提及的其他方法可以很好地工作,但是如果原始海报或其他读者扩展到一个非常大的矩阵,该怎么办?ff解决方案可以更好地扩展。是的,但无论如何它超出了问题的范围。我也经常使用这种方法,以及package parallel的并行功能。在执行此操作时,将数据复制到并行工作程序只会复制ff对象的虚拟部分,这比将所有传递到并行函数的数据复制要快得多。