R中的致命错误(仅在多次调用后)

R中的致命错误(仅在多次调用后),r,fatal-error,lapply,R,Fatal Error,Lapply,我用多个lappy编码了一些级联函数。这些函数可以工作,但我总是在第五次调用函数后遇到致命错误。可能是什么原因造成的?我不认为这是内存问题:执行函数(一次)需要8秒。我还尝试在函数中包含gc(),并在另一台计算机(也是Mac和稍旧的R)上执行代码。没有任何帮助 $platform [1] "x86_64-apple-darwin13.4.0" $arch [1] "x86_64" $os [1] "darwin13.4.0" $system [1] "x86_64, darwin13.4.

我用多个
lappy
编码了一些级联函数。这些函数可以工作,但我总是在第五次调用函数后遇到致命错误。可能是什么原因造成的?我不认为这是内存问题:执行函数(一次)需要8秒。我还尝试在函数中包含
gc()
,并在另一台计算机(也是Mac和稍旧的R)上执行代码。没有任何帮助

$platform
[1] "x86_64-apple-darwin13.4.0"

$arch
[1] "x86_64"

$os
[1] "darwin13.4.0"

$system
[1] "x86_64, darwin13.4.0"

$status
[1] ""

$major
[1] "3"

$minor
[1] "3.2"

$year
[1] "2016"

$month
[1] "10"

$day
[1] "31"

$svn rev
[1] "71607"

$language
[1] "R"

$version.string
[1] "R version 3.3.2 (2016-10-31)"

$nickname
[1] "Sincere Pumpkin Patch"
例子
require(xts)
stoplosx=函数(yy){
填充=函数(x){
if(unique(is.na(x))=='TRUE')返回(x)
naseries=cbind(x,NA)[,2]

其中=哪个(x
traceback()
将告诉您错误的大致来源。将
browser()
插入函数的第一行,然后按
c
逐步完成。一旦进入“循环”5、开始一次一行地遍历函数,检查元素,看看能做些什么。如果没有可复制的示例,这真的是无法回答的。我尝试了浏览器()想法,但我马上得到了致命错误。我将用可复制的函数代码更新问题。请同时指出您将
browser()
调用放置在何处。您能否在使用函数定义之前验证您是否重新运行了函数定义?
traceback()
说了什么(请不要将输出粘贴到注释部分)?亲爱的Roman,我尝试了各种放置方式。有时函数会运行,有时又会出现致命错误(无法跟踪)。您是否可以在计算机上运行脚本,看看是否会发生同样的情况?(我从函数中提供了数据)我真的不知道该做什么当我运行此程序时,我在创建
long\u split
时在long*dailryrx2:non-conformable array
中遇到了一个错误
错误,因为数组维度不匹配。请参阅如何创建工作流以便轻松调试代码。一旦确定了错误,就可以将其封装到函数中。确保不要每次都重复固定步骤(比如提取我认为是静态的数据)。
require(xts)
stoplossx = function(yy) { 
  populate = function(x) { 
    if(unique(is.na(x))=='TRUE') return(x)
    naseries=cbind(x,NA)[,2]
    where=which(x<(yy))[1]
    if(!is.na(where)) return(na.locf(cbind(x[1:where],naseries)[,1]))
    if(is.na(where)) return(x)
  }
  populate2 = function(zz) {
    do.call(cbind, lapply(as.list(zz), populate))
  }

dailyip=readRDS(gzcon(url("https://dl.dropboxusercontent.com/s/kfxg1vi1s6hv6cg/dailyip.rds")))
  #dailyip=readRDS('~/Dropbox/MS/dailyip.rds') 
  long=ifelse(dailyip==1,1,NA)
  short=ifelse(dailyip==-1,-1,NA)
  dailyrx=readRDS(gzcon(url("https://dl.dropboxusercontent.com/s/of47enf79ugkq8c/dailyrx.rds")))
  #dailyrx=readRDS('~/Dropbox/MS/dailyrx.rds') 
  dailyrx2=do.call(rbind, lapply(split(dailyrx, 'months'), cumsum)) 

  long_split <- split(long*dailyrx2, 'months')
  short_split <- split(short*dailyrx2, 'months')

  # split into month, and then into columns in populate2
  stoploss_l <- do.call(rbind, lapply(long_split, populate2))
  stoploss_s <- do.call(rbind, lapply(short_split, populate2))

  rx4b <- xts(rowMeans(apply.monthly(stoploss_l, last), na.rm=T)+
              rowMeans(apply.monthly(stoploss_s, last), na.rm=T), 
              index(apply.monthly(stoploss_l, last)))
  gc()
  return(rx4b)
}

stoplossx(-0.01)
stoplossx(-0.02)
stoplossx(-0.03)
stoplossx(-0.04)
stoplossx(-0.05)