【问题标题】:Function imports "dplyr", but I am still getting error "could not find function "%>%""函数导入“dplyr”,但我仍然收到错误“找不到函数“%>%””
【发布时间】:2020-06-16 13:42:01
【问题描述】:

我创建了一个使用包“dplyr”的函数(在包内)。我使用 roxygen2 来记录我的函数,并包含了#' @import dplyr。通常在我的函数中,当我从包中调用特定函数时,我使用dplyr::function。但是,我不确定如何使用类似的结构来阻止此错误:

Error in data %>% dplyr::group_by(dir.binned) %>% dplyr::summarise(count = n()) %>%  : 
  could not find function "%>%"

调用错误的代码:

    T_data <- data %>%
  dplyr::group_by(dir.binned) %>%
  dplyr::summarise(count= n()) %>%
  dplyr::mutate(y = count/sum(count))

有人知道解决此错误的最佳方法吗?

谢谢!

【问题讨论】:

标签: r dplyr


【解决方案1】:

@import 仅声明您正在导入一个包,但没有直接提供任何名称(没有通过pkg::name 明确限定其全名)。

相比之下,@importFrom确实使名称直接可用,这就是您需要为运算符使用的。所以,在你的函数前面使用管道运算符,写

#' @importFrom dplyr %>%

您也可以改为从“magrittr”包中导入管道运算符 - 这是“dplyr”(当前)从中导入它的地方。但是,这会给您的包添加另一个直接依赖项,这与尽可能合理地最小化包的依赖项的想法背道而驰。诚然,您的包当前(传递地)依赖于“magrittr”无论如何,但如果“dplyr”决定实现自己的管道运算符(或从其他地方导入),这种传递依赖将会改变。

还有一种方法是在你自己的包中给操作符起别名:

`%>%` = dplyr::`%>%`

但是,只有当您还打算重新导出运算符时,这才真正有意义。

【讨论】:

    猜你喜欢
    • 2019-10-14
    • 1970-01-01
    • 1970-01-01
    • 2011-09-02
    • 1970-01-01
    • 2016-11-26
    • 2022-08-03
    • 2019-01-03
    • 2017-02-07
    相关资源
    最近更新 更多