group_by我在使用时出现超级随机错误,dplyr如下所示
dat %>% group_by(variable) %>% mutate(score = score[1])
Run Code Online (Sandbox Code Playgroud)
其中dat是data.frame带有因子/字符的列variable,score是双精度值。我得到的错误是这样的:
Value of SET_STRING_ELT() must be a 'CHARSXP' not a 'character'
Run Code Online (Sandbox Code Playgroud)
variable。score[1])。variable我可以用or进行各种计算score。变量仅包含重复条目“arima”和“prophet”,没有NAs。这让我疯狂...
我用谷歌搜索了错误,但找不到好的帮助,除了缩小范围,这就是我所做的,即简单的group_by计算。此外,我重新启动了 R 会话,重新启动了计算机,更新了我的 R 版本和软件包dplyr,现在版本为 1.07。我在 Ubuntu 20.04.3 LTS 上使用 R 版本 4.1.1。
有什么想法可能会产生此错误吗?
编辑 我无法提供带有模拟数据的可重现样本,因为它只发生在特定数据上。在这里,我上传了导致错误的数据https://filebin.net/9pywc544hsmgm2p3
然后运行以下代码
A <- readRDS("dat.rds") %>%
group_by(variable) %>%
mutate(score = score[1])
Run Code Online (Sandbox Code Playgroud)
有趣的是,如果你按A[1:nrow(A), ]而不是分组A,它会起作用,尽管它是相同的数据。
编辑 2: 我现在可以运行计算几次,但在某些时候我总是会遇到相同计算的致命错误。我感觉这似乎是我的系统特有的。所以可能我必须重新安装所有东西。
编辑3:
这样做as.numeric(score)可以解决问题。所以看起来分数的名称属性出了问题。然而,它们看起来并不可疑,并且都有相同的名字,即“new_confirmed10”。
这是实现 R 函数的 C 代码中的内部错误。它永远不应该出现在用户代码中。这绝对是某个地方的错误。你也许可以在看到它后立即奔跑来稍微缩小位置范围traceback()。这将列出错误发生时所有处于活动状态的 R 函数,并可能给出调用有错误的 C 代码的 R 函数的位置。
请整理一个可重现的示例(即给我们一种构建方法,dat以便我们可以在我们的系统上重现它)。SO 上的某人将能够找到错误的原因,并且也许能够告诉您解决方法,或者告诉代码的作者如何修复它。
如果您做不到这一点,那么任何人都不太可能帮助您,但这里有一些一般性建议:
gdb或lldb进行C级调试。如果您以前没有使用过这些,那并不容易。编辑添加:
在检查了文件的上传版本后dat.rds,我想我已经发现了部分问题。运行这段代码:
dat <- readRDS("dat.rds")
table(names(dat$score))
Run Code Online (Sandbox Code Playgroud)
我可以看到 的名称dat$score是 744 个副本"new_confirmed10"。重复的名字是不寻常的,但合法。然而, 的长度dat$score是 1488 (与 的行数相同dat),据我所知,名称数量与对象长度不同是不合法的。(如果您只为某些元素指定名称,则应该NA为其他元素指定名称。)
当您运行代码时,mutate 调用中的某些内容会崩溃,因为它假设对象格式良好,但事实并非如此。所以这不是 中的错误dplyr,但我认为这是在 中创建对象的任何代码中的错误dat.rds。你有关于它是如何创建的记录吗?