我有一个内存密集型的脚本,除非有很大的空闲块,否则我不希望它运行。所以我写了这个:
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")
输出中,空闲内存显示在第四列,而不是最后一列。