当尝试在数据集上使用dplyr的n_distinct函数时,我遇到了这个错误:
cannot handle object of type VECSXP
导致此错误的原因可能是什么,我该如何避免?我希望这里有足够的信息来回答这个问题,我会提供更多的信息,但我甚至不知道在哪里关注。
谢谢!
答案 0 :(得分:3)
我不确定您的数据是什么样的,但我怀疑您在n_distinct
上尝试使用list
时希望将矢量作为输入(VECSXP
是< em> C 表示 R list
):
set.seed(123)
x <- sample(1:3, 7, replace=TRUE)
df1 <- data.frame(x)
df1$y <- list(x)
##
R> dplyr::n_distinct(df1$x)
[1] 3
##
R> dplyr::n_distinct(df1$y)
Error: cannot handle object of typeVECSXP
您的错误似乎是从here生成的:
// [[Rcpp::export]]
SEXP n_distinct(SEXP x){
int n = Rf_length(x) ;
if( n == 0 ) return wrap(0) ;
SlicingIndex everything(0, n);
boost::scoped_ptr<Result> res( count_distinct_result(x) );
if( !res ){
stop( "cannot handle object of type %s", type2name(x) );
}
return res->process(everything) ;
}
同样,仍不确定你的代码是什么样的,但我认为你正在做类似的事情
R> dplyr::n_distinct(Dt[,1,with=F])
#Error: cannot handle object of typeVECSXP
而不是
R> dplyr::n_distinct(Dt[[1]])
##[1] 2
并且由于第一个案例返回data.table
(因此是list
),
R> Dt[,1,with=F]
x
1: 1
2: 2
R> class(Dt[,1,with=F])
[1] "data.table" "data.frame"
而不是原子矢量,
R> Dt[[1]]
[1] 1 2
R> class(Dt[[1]])
[1] "integer"
您收到错误。
library(data.table)
Dt <- data.table(x=1:2, y=3:4)