错误:SET_STRING_ELT() 的值必须是 dplyr group_by 中的“CHARSXP”而不是“字符”

Nic*_*Nic 6 r dplyr

group_by我在使用时出现超级随机错误,dplyr如下所示

dat %>% group_by(variable) %>% mutate(score = score[1])
Run Code Online (Sandbox Code Playgroud)

其中datdata.frame带有因子/字符的列variablescore是双精度值。我得到的错误是这样的:

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。
  • 此外,错误消息仅有时出现。大多数情况下,R 会话只是由于致命错误而终止。

这让我疯狂...

我用谷歌搜索了错误,但找不到好的帮助,除了缩小范围,这就是我所做的,即简单的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”。

use*_*330 3

这是实现 R 函数的 C 代码中的内部错误。它永远不应该出现在用户代码中。这绝对是某个地方的错误。你也许可以在看到它后立即奔跑来稍微缩小位置范围traceback()。这将列出错误发生时所有处于活动状态的 R 函数,并可能给出调用有错误的 C 代码的 R 函数的位置。

请整理一个可重现的示例(即给我们一种构建方法,dat以便我们可以在我们的系统上重现它)。SO 上的某人将能够找到错误的原因,并且也许能够告诉您解决方法,或者告诉代码的作者如何修复它。

如果您做不到这一点,那么任何人都不太可能帮助您,但这里有一些一般性建议:

  • 不要使用仅在 Github 上的软件包或软件包版本,坚持使用通常经过更好测试的 CRAN 软件包。
  • 如果你正在开发自己的C/C++代码并且它以某种方式涉及到这里,你需要使用gdblldb进行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。你有关于它是如何创建的记录吗?