具有group_by的dplyr top_n-as.list(x)中的错误:尝试从不是S4对象的对象(类“ quosures”)获取插槽“ matsin”

时间:2019-08-07 14:54:07

标签: r dplyr tidyverse anti-join

我已经成功使用了以下代码一段时间,但是由于某种原因,现在它坏了。 尽管我已经加载了和以前一样的软件包。同时,对R或dplyr版本没有任何更改。

看来dplyr的top_n()函数不再适用于管道。

请问有人有解决此错误消息的经验吗?任何帮助或提示都将受到高度赞赏。

R:3.6.1; dplyr:0.8.3

df %>% group_by(ID) %>% top_n(1,MRP)

跟踪:

Error in as.list(x) : trying to get slot "matsin" from an object (class "quosures") that is not an S4 object
20.
as.list(x)
19.
splice(dot_call(capture_dots, frame_env = frame_env, named = named, ignore_empty = ignore_empty, unquote_names = unquote_names, homonyms = homonyms, check_assign = check_assign))
18.
FUN(X[[i]], ...)
17.
lapply(.x, .f, ...)
16.
map(syms, function(sym) { if (!is_symbol(sym)) { abort("Inputs to capture must be argument names") } ...
15.
endots(call = sys.call(), frame_env = parent.frame(), capture_arg = rlang_enquo, capture_dots = rlang_quos_interp, named = .named, ignore_empty = .ignore_empty, unquote_names = .unquote_names, homonyms = .homonyms, check_assign = .check_assign)
14.
enquos(...)
13.
quo_reduce(..., .op = op)
12.
all_exprs(!!!dots, .vectorised = TRUE)
11.
filter.tbl_df(x, top_n_rank({ { n } ...
10.
filter(x, top_n_rank({ { n } ...
9.
top_n(., 1, MRP)
8.
function_list[[k]](value)
7.
withVisible(function_list[[k]](value))
6.
freduce(value, `_function_list`)
5.
`_fseq`(`_lhs`)
4.
eval(quote(`_fseq`(`_lhs`)), env, env)
3.
eval(quote(`_fseq`(`_lhs`)), env, env)
2.
withVisible(eval(quote(`_fseq`(`_lhs`)), env, env))
1.
df %>% group_by(ID) %>% top_n(1,MRP)

2 个答案:

答案 0 :(得分:0)

data.table的解决方法:

as.data.table(df)[,tail(.SD,1),by=ID]

答案 1 :(得分:0)

由于软件包ycinterextra导出了自己的as.list,因此遇到了同样的问题。

可能的快速修复:

library(ycinterextra)
library(dplyr)

as.list <- base::as.list

在包导入语句后从as.list恢复base