在Linux中替代R的`memory.size()`?

use*_*035 12 linux memory r

Rmemory.size()仅仅是一个窗口.对于其他功能(例如windows()),帮助页面提供指向非Windows对应项的指针.但是因为memory.size()我找不到这样的指针.所以这是我的问题:是否有一个函数可以做同样memory.size()但在linux中?

RHe*_*tel 11

我认为这应该由操作系统处理.我所知道的没有内置限制; 如果有必要,R将使用它可以获得的所有内存.

要获取有关linux中总数和/或可用内存的信息,您可以尝试

system('grep MemTotal /proc/meminfo')
Run Code Online (Sandbox Code Playgroud)

要么

system('free -m')
Run Code Online (Sandbox Code Playgroud)

要么

system('lshw -class memory')
Run Code Online (Sandbox Code Playgroud)

最后一个命令会抱怨你应该以超级用户的身份运行它,它会发出一个警告,提示输出可能不准确; 但根据我的经验,它仍然会提供相当有用的输出.


要获取有关正在运行的R脚本的内存使用情况的信息,可以通过top在单独的终端中启动来监视当前使用的资源,或者使用例如R脚本中的以下系统调用:

system(paste0("cat /proc/",Sys.getpid(),"/status | grep VmSize"))
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.

  • @Argent `memory.limit()` 是 Windows 特定的。OP 特别询问了有关 Linux 的问题。正如我在答案中所写,系统调用可以帮助“获取信息”,而不是向 R 脚本提供任何内容。请在投反对票之前仔细阅读。 (2认同)

zx8*_*754 5

使用pyr库:

library("pryr")

mem_used()
# 27.9 MB

x <- mem_used()
x
# 27.9 MB
class(x)
# [1] "bytes"
Run Code Online (Sandbox Code Playgroud)

结果与@RHertel 的答案相同,使用pryr我们可以将结果分配给变量。

system('grep MemTotal /proc/meminfo')
# MemTotal:       263844272 kB
Run Code Online (Sandbox Code Playgroud)

要使用系统调用分配给变量,请使用intern = TRUE

x <- system('grep MemTotal /proc/meminfo', intern = TRUE)
x
# [1] "MemTotal:       263844272 kB"
class(x)
# [1] "character"
Run Code Online (Sandbox Code Playgroud)