首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >错误: SET_STRING_ELT()的值必须是“CHARSXP”,而不是dplyr group_by中的“字符”

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

Stack Overflow用户
提问于 2021-10-29 10:03:18
回答 4查看 2.4K关注 0票数 6

group_by中使用dplyr时有一个超级随机错误,如下所示

代码语言:javascript
运行
复制
dat %>% group_by(variable) %>% mutate(score = score[1])

其中dat是带因子/字符列的data.framevariablescore是双列。我得到的错误是:

代码语言:javascript
运行
复制
Value of SET_STRING_ELT() must be a 'CHARSXP' not a 'character'

不管计算的variable.

  • Regardless名称如何(例如,score[1]).

  • I可以按任何其他variable.

  • Both变量分组,似乎都可以。我可以用variablescore做各种计算。变量只有重复的条目"arima“和”预言家“,没有NAs.

  • Also,的错误消息有时才会出现。大多数情况下,R会话只是由于致命的错误而终止。

快把我逼疯了。

我在googled上搜索了错误,找不到好的帮助,除了缩小它,这就是我所做的,即一个简单的group_by计算。此外,我重新启动了R会话,重新启动了计算机,更新了我的R版本和dplyr包,该包现在在版本1.07上。我在Ubuntu20.04.3LTS上使用RVersion4.1.1。

对什么可能会产生这个错误有任何想法吗?

编辑I不能提供一个可复制的模拟数据样本,因为它只发生在特定数据上。在这里,我上传了导致错误https://filebin.net/9pywc544hsmgm2p3的数据

然后运行以下代码

代码语言:javascript
运行
复制
A <- readRDS("dat.rds") %>% 
    group_by(variable) %>% 
    mutate(score = score[1])

有趣的是,如果您按照A[1:nrow(A), ]而不是A进行分组,那么它可以工作,尽管它是相同的数据。

编辑2: --我现在可以运行几次计算了,但是在某些时候,对于相同的计算,我总是会得到一个致命的错误。我觉得这似乎是我的系统特有的。所以我可能要重新安装所有的东西。

编辑3: the as.numeric(score)解决了这个问题。所以看来分数的名字属性有问题了。然而,他们看起来并不可疑,而且都有相同的名字,即"new_confirmed10“。

EN

回答 4

Stack Overflow用户

发布于 2021-10-29 10:28:09

这是实现R函数的C代码中的内部错误。它不应该发生在用户代码中。这肯定是个窃听器。您可以在看到traceback()后立即运行它,从而稍微缩小位置。这将列出在错误发生时活动的所有R函数,并可能给出调用buggy代码的R函数的位置。

请结合一个可重复的例子(即,给我们一种构造dat的方法,以便我们可以在我们的系统上再现它)。因此,这里的人将能够找到错误的原因,也许能够告诉您一个解决办法,或者告诉代码的作者如何修复它。

如果你不能这样做,不太可能有人能帮助你,但以下是一些一般性的建议:

  • 不使用只在Github上的包或包版本,坚持使用通常得到更好测试的CRAN包。
  • --如果您正在开发自己的C/C++代码,并且在这里某种程度上涉及到它,您需要使用gdblldb进行C级调试。如果你以前没有使用过这些,那就不容易了。--

编辑后添加:

在检查了dat.rds文件的上传版本之后,我想我已经发现了问题的一部分。运行以下代码:

代码语言:javascript
运行
复制
dat <- readRDS("dat.rds")
table(names(dat$score))

我看到dat$score的名字是"new_confirmed10"的744份。重复名字是不寻常的,但是是合法的。然而,dat$score的长度是1488 (与dat的行数相同),据我所知,拥有与对象长度不同的名称是合法的。(如果只为某些元素分配名称,则应该在其他元素上获得名称NA。)

当您运行您的代码时,变异调用中的某些内容会崩溃,因为它假定对象格式良好,而不是。所以这不是dplyr中的bug,但我认为它是在dat.rds中创建对象的任何代码中的一个bug。您有关于它是如何创建的记录吗?

票数 3
EN

Stack Overflow用户

发布于 2021-10-29 19:50:06

我有点解决了。scoreNamed num。在做了as.numeric(score)之后,它成功了。仍然不知道为什么名称属性会导致这个错误(它们看起来都很正常),但也是如此。当我将数据导出为.csv.rds时,我就意识到了这一点,只有在重新加载.rds数据时才会发生错误,因此我认为它必须与一些数据属性相关。

票数 1
EN

Stack Overflow用户

发布于 2021-11-01 11:17:21

谢谢您的重新上传;我可以很好地阅读d <- readRDS(".../dat.rds"),然后很容易地看到@ then 2554330上面写的内容:

代码语言:javascript
运行
复制
> d <- readRDS("<....>/dat.rds")
> str(d)
'data.frame':   1488 obs. of  4 variables:
 $ facet_var: chr  "AUT" "AUT" "AUT" "AUT" ...
 $ date     : Date, format: "2020-04-26" "2020-04-27" ...
 $ variable : Factor w/ 2 levels "arima","prophet": 1 1 1 1 1 1 1 1 1 1 ...
 $ score    : Named num  2.74e-06 2.41e-06 2.48e-06 2.39e-06 2.79e-06 ...
  ..- attr(*, "names")= chr [1:744] "new_confirmed10" "new_confirmed10" "new_confirmed10" "new_confirmed10" ...
> 

因此,问题仍然存在:无效的score列是如何创建的?我假设是一些C代码无效地工作,因为我不认为您可以使用简单的R代码来创建它。

这是一个无效对象的“证据”,可以重复使用

代码语言:javascript
运行
复制
> ds <- d$score
> dput(ds)

 *** caught segfault ***
address (nil), cause 'memory not mapped'

Traceback:
 1: dput(ds)

Possible actions:
1: abort (with core dump, if enabled)
2: normal R exit
3: exit R without saving workspace
4: exit R saving workspace
Selection: 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69767054

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档