1

我在 R 中有一个长时间运行的进程(通过 Rstudio-server),我怀疑它可能存在内存问题,最终导致 R 会话崩溃。不幸的是,我无法准确监控正在发生的事情:崩溃日志是否存在,如果存在,我在哪里可以找到它们?

我的设置如下:

  • Rstudio-server 安装在 ubuntu 12.04 中,在 vmmare 播放器虚拟机上。
  • 我在安装 Windows 7 时从 firefox 访问 r 会话。
  • 我让程序运行了一夜,回来发现rstudio界面出现以下错误信息:

    由于意外崩溃,先前的 R 会话异常终止。由于此崩溃,您可能丢失了工作区数据。

似乎以下代码导致了问题(不是可重现的示例)。该代码采用回归公式列表(约 250k)、1500 行 x 70 列的数据框,还允许您指定要在计算中使用的核心数:

get_models_rsquared = function(combination_formula,df,cores = 1){
  if (cores == "ALL"){cores <- detectCores()}
  require(parallel) #if parallel processing is not required, mclapply should be changed to lapply.

  #using mclapply to calculate linear models in parallel,
  #storing adjusted r-squared and number of missing rows in a list
  combination_fitted_models_rsq = mclapply(seq_along(combination_formula), function(i) 
    list(summary(lm(data = df, combination_formula[[i]]))$adj.r.squared,
         length(summary(lm(data = df, combination_formula[[i]]))$na.action)), mc.cores = cores  )

  #now store the adjusted r-squared and missing rows of data
  temp_1 = lapply(seq_along(combination_fitted_models_rsq), function(i) 
    combination_fitted_models_rsq[[i]][[1]])
  temp_1 = as.numeric(temp_1)

  temp_2 = lapply(seq_along(combination_fitted_models_rsq), function(i) 
    combination_fitted_models_rsq[[i]][[2]])
  temp_2 = as.numeric(temp_2)

  #this is the problematic line
  temp_3 =  lapply(seq_along(combination_formula), function(i) {
    length(attributes(terms.formula(combination_formula[[i]]))$term.labels)
  }#tells you number of predictors in each formula used for linear regression
   )#end lapply
  result = data.frame(temp_1,temp_2,temp_3)
  names(result) = c("rsquared","length.na","number_of_terms")
  return(result)
}

调用函数时,计算temp_3似乎会出现问题。但是,如果您将代码从函数中取出并在运行函数后进行temp_3计算,则一切正常。

4

0 回答 0