gpt4 book ai didi

r - 在 R 中,此错误 : "Value of SET_STRING_ELT() must be a ' CHARSXP' not a 'character' "的常见情况有哪些

转载 作者:行者123 更新时间:2023-12-02 17:59:55 24 4
gpt4 key购买 nike

我正在与 R 中的一个奇怪问题作斗争。我使用旧版本的 Rcpp 将 R 与一些 C++ 集成(遗憾的是升级不是一种选择!),我使用的 Rcpp 是旧的 RccpTemplate 。但我怀疑问题出在哪里。

我有一些 R 代码在大多数情况下运行良好,但有时(特别是在处理大量数据时)会神秘地失败,SET_STRING_ELT() 的值必须是“CHARSXP”而不是“字符” '

列表操作总是失败,例如:

res[["blabla"]] = r

但是如果我使用 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

最佳答案

这是由 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

然后仔细检查代码,特别是寻找 PROTECT 的误用。请参阅gdb 帮助。我强烈建议更新 R 和您的软件包,因为错误确实得到了修复,并且您将在这方面投入大量时间。

关于r - 在 R 中,此错误 : "Value of SET_STRING_ELT() must be a ' CHARSXP' not a 'character' "的常见情况有哪些,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5511291/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com