为什么我在 R 中得到"Error: `...` is not empty"?

  • 本文关键字:Error not empty is r dplyr
  • 更新时间 :
  • 英文 :


我是一个Python人,被要求运行一些返回以下错误的R代码:

错误:...不为空。

我们发现了这些有问题的论点:

  • ..1

这些点的存在只是为了允许将来的扩展,并且应该为空。 您是否指定了错误的参数?运行rlang::last_error()以查看位置 发生错误。

我可以将代码简化为此 MWE:

library(dplyr)
x <- data.frame(1)
x %>% ungroup(x)

我不知道第 3 行应该做什么,但它在我的系统(dplyr 1.0.0(上失败,同时使用 dplyr 0.8.5 或在打印的 https://rdrr.io/snippets/上工作

X1
1  1

我尝试了很多事情,但没有成功:

update.packages(ask = FALSE)
remove.packages("dplyr")
install.packages("dplyr")

这是怎么回事?我该如何(帮助(调查?

更新options(error = recover)给了我这个:

1: x %>% ungroup(x)
2: withVisible(eval(quote(`_fseq`(`_lhs`)), env, env))
3: eval(quote(`_fseq`(`_lhs`)), env, env)
4: eval(quote(`_fseq`(`_lhs`)), env, env)
5: `_fseq`(`_lhs`)
6: freduce(value, `_function_list`)
7: withVisible(function_list[[k]](value))
8: function_list[[k]](value)
9: ungroup(., x)
10: ungroup.data.frame(., x)
11: ellipsis::check_dots_empty()
12: action_dots(action = action, message = "`...` is not empty.", dot_names = n
13: action(message, .subclass = c(.subclass, "rlib_error_dots"), ...)
14: signal_abort(cnd)

另一个更新:完整的代码行,非最小化,如果这很重要的话,是

screenData <- mutate_if(screenData, is.character, as.factor) %>% ungroup(screenData)

也许这比我的MWE更有意义。

另一个dput(screenData)回报

structure(list(wellID = "A001", rowID = "A0", colID = "01", value = 0, 
fileName = "V3_Prob5_p1", batch = structure(NA_integer_, .Label = character(0), class = "factor"), 
sampleID = NA, patientID = NA, name = NA_character_, concentration = NA_real_, 
wellType = "sample"), row.names = c(NA, -1L), class = c("tbl_df", 
"tbl", "data.frame"))

最后,我向代码维护者提出了一个问题,请参见 https://github.com/lujunyan1118/DrugScreenExplorer/issues/1, 和dplyr,请参阅 https://github.com/tidyverse/dplyr/issues/5368

管道%>%是句法糖。 它的意思是"获取管道左侧的对象,并将其用作管道右侧函数的第一个参数"。

所以你可以说ungroup(x)x %>% ungroup(),两者都有效,但x %>% ungroup(x)试图取消名为x的数据帧分组,并从名为x的 data.frame 分组中删除名为x的变量。 但是 data.framex不包含一个名为x的变量。 因此问题来了。

你得到的代码本质上是错误的(或者至少写得令人困惑(。

更新在您的dput帖子之后。

screenData %>% ungroup(screenData)等效于ungroup(screenData, screenData)其中第一个screenData是要取消分组的 data.frame,第二个是要从分组中删除的 data.frame 中的变量的名称。 但是 data.framescreenData不包含名为screenData的列。 这就是您收到错误的原因。

您获得的代码无疑是不正确的。

它在以前版本的dplyr中运行没有错误这一事实纯粹是偶然的。

ungroup函数不需要额外的参数。为您提供的代码是错误的。从ungroup呼叫中删除x

这似乎是tibble包的问题。看这里。

更新tibble为我解决了这个问题。

最新更新