我有一个内存密集型的脚本,除非有很大的空闲块,否则我不希望它运行。所以我写了这个:

library(dplyr)
system("free | tee free.txt")
memfree <-   read.delim("free.txt")[1,] %>% as.character %>%
  strsplit(" ") %>%
  unlist %>%
  (function(x){x[length(x)]}) %>%
  as.numeric/1e6
system("rm free.txt")

我得到一个memfree变量,我可以用它作为条件。
但必须有一个更好的方法,这不包括将cruft保存到磁盘,然后再次读取它,以及执行奇怪的字符串解析。这是怎么一回事?

最佳答案

一个解决方案是

freemem <- function(){
    tmp <- system("free", inter=TRUE)[2]
    tmp <- gsub("(?<=[\\s])\\s*|^\\s+|\\s+$", "", tmp, perl=TRUE)
    as.numeric(strsplit(tmp, " ")[[1]][4])/1e6
}
freemem()

在我的system("free")输出中,空闲内存显示在第四列,而不是最后一列。

07-24 09:52
查看更多