我想找到由 R 函数调用的 C++ 代码的文本,特别"_dplyr_summarise_impl"
是 summarise_impl 调用的函数。更具体地说,我想找到返回错误消息之前的代码“
Error in summarise_impl(.data, dots) :
Evaluation error: argument "yes" is missing, with no default.
我认为上面代码中的“是”有所不同,但它是由其他一些 dplyr 或相关的 tidyverse 提供的,因为我的代码都没有缺少“是”参数。或者它可能是由 tidyverse 代码调用的基本 R 代码。但在任何一种情况下,错误消息和我可以通过回溯看到的最后一个函数之间都存在差距,我猜是因为回溯无法通过调用的 C++ 代码找到它的方式。我假设如果我能找到应该提供“是”参数的代码,那将告诉我出了什么问题。但是回溯提供的最后一个函数与上面的错误消息之间存在差距。我正在寻求帮助以弥合这一差距。
现在在我看来,这是 eval 的某个版本(base 或 tidyverse)的标准错误消息,由 _dplyr_summarise_impl 或它调用的某个函数调用。许多,也许是所有的 dplyr 主要动词都有一个形式为 的未导出函数<function>_impl
,所有这些函数都返回与前面引用的非常相似的错误消息。所以我怀疑他们可能正在调用一个常见的错误消息过程。
我刚刚在 dplyr/src/RcppExports.cpp 中找到了 _dplyr_summarise_impl 的文本。这让我更近了一步,但我对 C++ 的了解不够多,无法知道这些行中的哪一行最有可能调用调用错误的函数。猜猜我接下来会阅读 Advanced R 中的 C++ 章节。
// summarise_impl
SEXP summarise_impl(DataFrame df, QuosureList dots);
RcppExport SEXP _dplyr_summarise_impl(SEXP dfSEXP, SEXP dotsSEXP) {
BEGIN_RCPP
Rcpp::RObject rcpp_result_gen;
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< DataFrame >::type df(dfSEXP);
Rcpp::traits::input_parameter< QuosureList >::type dots(dotsSEXP);
rcpp_result_gen = Rcpp::wrap(summarise_impl(df, dots));
return rcpp_result_gen;
END_RCPP
}