首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调用dplyr::所有函数中的所有()将导致Travis CI构建失败

调用dplyr::所有函数中的所有()将导致Travis CI构建失败
EN

Stack Overflow用户
提问于 2016-05-05 01:46:25
回答 1查看 264关注 0票数 0

我正在开发一个托管在GitHub上的R包。当我将dplyr::everything()添加到我的函数中时,它会导致Travis构建失败(尽管它在本地安装得很好)。Travis错误将dplyr中的everything()函数归咎于dplyr,并且足够肯定的是,当我删除它时,问题就解决了。其职能是:

代码语言:javascript
复制
get_dupes <- function(dat, ...) {
  dupes <- dat %>%
    dplyr::group_by(...) %>%
    dplyr::filter(n() > 1)  %>%
    dplyr::mutate(dupe_count = n()) %>%
    dplyr::select(..., dupe_count, dplyr::everything()) %>%
    dplyr::ungroup() %>%
    dplyr::arrange(...)

  var_names <- sapply(as.list(substitute(list(...)))[-1L], deparse)

  if(nrow(dupes) == 0){return(paste0("No duplicate combinations found of: ", paste(var_names, collapse = ", ")))}
  dupes
}

删除该dplyr::everything()调用可以解决问题--但是函数不能按我的要求执行(返回所有变量)。

Travis错误消息包括:

代码语言:javascript
复制
>>> Filename: janitor.Rcheck/00install.out <<<
* installing *source* package ‘janitor’ ...
** R
** preparing package for lazy loading
Error : object ‘everything’ is not exported by 'namespace:dplyr'
ERROR: lazy loading failed for package ‘janitor’
* removing ‘/home/travis/build/sfirke/janitor/janitor.Rcheck/janitor’

为什么everything()的行为与我使用的其他dplyr函数不同?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-05 01:51:17

因为everything不是由dplyr导出的函数。

代码语言:javascript
复制
> library(dplyr)
> everything
Error: object 'everything' not found
> dplyr:::everything
function (vars) 
{
    seq_along(vars)
}
<environment: namespace:dplyr>

使用3个冒号:::访问名称空间或包中的未导出函数。或者在本例中,由于它非常简单,所以您可以直接在seq_along调用中使用select (因为在编写包时引用其他人的未导出对象是错误的形式)。

编辑:实际上,您应该能够只执行dplyr::select(*, everything()),而无需显式指定everything的命名空间。这是因为当调用select时,它查找对象的搜索路径将包含自己的命名空间。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37040984

复制
相关文章

相似问题

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