r - 错误:SET_STRING_ELT() 的值必须是 'CHARSXP' 而不是 dplyr group_by 中的“字符”
问题描述
如下使用group_by
时出现超级随机错误dplyr
dat %>% group_by(variable) %>% mutate(score = score[1])
其中dat
是一个data.frame
带有因子/字符的列variable
并且score
是一个双精度。我得到的错误是这样的:
Value of SET_STRING_ELT() must be a 'CHARSXP' not a 'character'
- 无论名称如何,它都会发生
variable
。 - 无论计算如何(例如
score[1]
)。 - 我可以按任何其他变量分组。
- 这两个变量似乎都很好。
variable
我可以勉强用or进行各种计算score
。变量只有重复的条目“arima”和“prophet”,没有NA
s。 - 此外,错误消息仅有时会显示。大多数情况下,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])
有趣的是,如果你分组A[1:nrow(A), ]
而不是A
它,虽然它是相同的数据。
编辑 2: 我现在可以运行几次计算,但在某些时候,我总是会遇到相同计算的致命错误。我觉得这似乎是我的系统特有的。所以可能我必须重新安装所有东西。
编辑3:
做as.numeric(score)
解决了这个问题。因此,分数的名称属性似乎有些问题。但是,它们看起来并不可疑,并且都具有相同的名称,即“new_confirmed10”。
解决方案
这是实现 R 函数的 C 代码中的内部错误。它不应该出现在用户代码中。这绝对是某个地方的错误。traceback()
您可能可以通过在看到它后立即运行来稍微缩小位置。这将列出在错误发生时所有处于活动状态的 R 函数,并可能给出调用错误 C 代码的 R 函数的位置。
请把一个可重现的例子放在一起(即给我们一种构建方法,dat
以便我们可以在我们的系统上重现它)。SO 上的某个人将能够找到错误的原因,也许能够告诉你一个解决方法,或者告诉代码的作者如何修复它。
如果您不能这样做,那么任何人都不太可能帮助您,但这里有一些一般性建议:
- 不要使用仅在 Github 上的包或包版本,坚持使用通常经过更好测试的 CRAN 包。
- 如果您正在开发自己的 C/C++ 代码并且它以某种方式在这里涉及,您需要使用
gdb
或lldb
进行 C 级调试。如果您以前没有使用过这些,那并不容易。
编辑添加:
在检查了dat.rds
文件的上传版本后,我想我已经发现了部分问题。运行此代码:
dat <- readRDS("dat.rds")
table(names(dat$score))
我可以看到 的名称dat$score
是 744 个副本"new_confirmed10"
。重复的名字是不寻常的,但合法的。但是, 的长度dat$score
是 1488 (与 的行数相同dat
),据我所知,名称的数量与对象的长度不同是不合法的。(如果您只为某些元素分配名称,则应该NA
在其他元素上获得名称。)
当您运行代码时,mutate 调用中的某些内容会崩溃,因为它假定对象格式正确,但事实并非如此。所以这不是 中的错误dplyr
,但我认为这是创建对象的任何代码中的错误dat.rds
。你有任何关于它是如何创建的记录吗?
推荐阅读
- node.js - 带有调用 TLS 证书 (JKS) 的 NODE JS 肥皂请求
- python - pyparsing - 如何使用比较运算符解析字符串?
- amazon-web-services - 容量调度程序不运行在不同队列中提交的多个作业
- c++ - POD 类型的二进制 I/O 如何不破坏别名规则?
- android - 无法打开 malloc 调试?
- keyerror - 尝试从字典中打印时出现关键错误
- javascript - 如何使代码中高度的像素值动态化?
- jquery - 如何在 Bootsrap 模式上仅隐藏滚动条拇指?
- flutter - 在执行 Widget 状态构建时导航
- python - 尝试使用 ip 范围制作 ip 列表