代码之家  ›  专栏  ›  技术社区  ›  generic_user

将可用系统内存分配给R中的变量的更好方法?

  •  1
  • generic_user  · 技术社区  · 7 年前

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

    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保存到磁盘,然后再次读取它,以及执行奇怪的字符串解析。这是怎么一回事?

    1 回复  |  直到 7 年前
        1
  •  0
  •   Nairolf    7 年前

    一个解决方案是

    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")