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]
其中=哪个(xtraceback()
将告诉您错误的大致来源。将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)