【问题标题】:R crashes after big for loop, apply or foreachR 在大 for 循环、应用或 foreach 后崩溃
【发布时间】:2023-03-17 17:48:01
【问题描述】:

我编写了一个脚本,该脚本在小样本数据集上运行良好,但是当我在更大的真实数据上尝试相同的操作时,R Studio Session 崩溃并出现致命错误,运行脚本时 R 会话也是如此不使用 RStudio。这是我的 sessionInfo() :

R version 3.3.1 (2016-06-21)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows >= 8 x64 (build 9200)

locale:
[1] LC_COLLATE=French_France.1252  LC_CTYPE=French_France.1252    LC_MONETARY=French_France.1252
[4] LC_NUMERIC=C                   LC_TIME=French_France.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

loaded via a namespace (and not attached):
[1] rsconnect_0.4.3 tools_3.3.1  

我尝试使用 for 循环、foreach 包、应用函数、plyr 构建相同的脚本......没有任何效果。很抱歉不能给出一个可重现的例子,但是脚本和数据非常大,当它们只是一个摘录时,它可以工作......

有谁知道问题出在哪里?我确切地说我没有收到任何错误消息...

编辑

这是我的代码,如果它可以帮助任何人找到解决方案:

     # pairing des sections
  print("Pairing...")
  pair <- pairing(revs)

  # établissement de la struture en "text" et "diff"
  revs <- structure(revs)

  # initialisation de la boucle
  if(init) revs <- init(revs)
  else revs[[1]] <- start

  depart_id <- max(revs[[1]][length(revs[[1]]) - 1][[1]]$diff$id)

  print("Versionning... ")
  for(i in 2:length(revs)) {

    print(i)

    old <- revs[[i-1]]
    new <- revs[[i]]

    pairSmall <- filter(pair, pairing == i)

    revs[[i]] <- one.status(new, old, pairSmall)
    revs[[i]] <- two.status(revs[[i]], old, pairSmall, depart_id)
    revs[[i]] <- three.status(revs[[i]],old, pairSmall, calcul.id(revs[[i]], old))
    revs[[i]] <- four.status(revs[[i]], old, pairSmall, calcul.id(revs[[i]], old))
    revs[[i]] <- five.status(revs[[i]], old, pairSmall)
    revs[[i]] <- six.status(revs[[i]], old, pairSmall, calcul.id(revs[[i]], old))
    revs[[i]] <- seven.status(revs[[i]], old, pairSmall, calcul.id(revs[[i]], old))
    revs[[i]] <- eight.status(revs[[i]], old, pairSmall, calcul.id(revs[[i]], old))

    }

【问题讨论】:

  • 很可能会发生这种情况,因为您的数据太大而无法放入 RAM 中,从而导致崩溃。
  • 我的数据大约是 50 mb,而我有 8gb ram... revs((i)) 的倍数分配会导致这样的问题?
  • 如果我理解正确,你没有初始化revs。您应该使用正确的尺寸预设它。看看here... 可重现的代码也会有所帮助。
  • Revs 存储我的数据,这里只是崩溃函数的代码,它以 revs 作为参数。这里我用 i 索引修改了 revs 值

标签: r apply


【解决方案1】:

其实是八.status函数的问题,所以请不要考虑这个问题,它没有很好地表述。

【讨论】:

    猜你喜欢
    • 2017-04-15
    • 1970-01-01
    • 1970-01-01
    • 2019-05-04
    • 2018-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-17
    相关资源
    最近更新 更多