我正在与R中的一个奇怪问题作斗争.我使用旧版本的Rcpp将R与一些C++集成(遗憾的是升级不是一个选项!),我使用的Rcpp是旧的RccpTemplate.但我怀疑问题是在那里.
我有一些R代码在大多数时间运行正常,但偶尔(特别是处理大量数据时)神秘地失败 Value of SET_STRING_ELT() must be a 'CHARSXP' not a 'character'
它总是在列表操作中失败,例如:
res[["blabla"]] = r
Run Code Online (Sandbox Code Playgroud)
但是如果我options(error=recover)在错误之后使用并尝试相同的操作,则可以毫无问题地执行分配.C++只处理数字向量,实际上距离失败的赋值的代码很远.
所以我模糊的问题是:这种行为最常见的原因是什么?记性不好?坏对象(可能不好RcppResultSet)?我遇到了解决这个问题的麻烦......
为了完整性:
platform i386-pc-solaris2.10
arch i386
os solaris2.10
system i386, solaris2.10
status
major 2
minor 10.1
year 2009
month 12
day 14
svn rev 50720
language R
Run Code Online (Sandbox Code Playgroud)
Mar*_*gan 12
这来自C代码中的错误,可能在您正在使用的包中(而不是R本身).C代码写错了,你有时只评估那个代码分支,或者C代码写得不正确,它会破坏内存.可能这需要一个C调试器; 我不确定Solaris,但在Linux上我会创建一个可靠地重现错误的脚本(这可能需要一些工作,但这是必不可少的步骤)然后做
R -d gdb
gdb> r # (r)un R
> ^C ## cntrl-C key, breaks into the debugger
gdb> b Rf_error # set breakpoint when error occurs; tab completion available
gdb> c # continue in R
> source("test-script.R") # [error occurs]
gdb> bt # backtrace -- current call stack, from Rf_error entry
gdb> up # move up the stack; use this to get to package C code
Run Code Online (Sandbox Code Playgroud)
然后仔细审查代码,特别是寻找误用PROTECT.见gdb help.我强烈建议更新R和你的软件包,因为bug已得到修复,你将需要投入大量时间.
| 归档时间: |
|
| 查看次数: |
2924 次 |
| 最近记录: |