功能导入";dplyr“是的;,但我还是犯了一个错误;找不到函数";%>;%&引用&引用;

功能导入";dplyr“是的;,但我还是犯了一个错误;找不到函数";%>;%&引用&引用;,r,dplyr,R,Dplyr,我创建了一个使用包“dplyr”的函数(在包内)。我使用roxygen2来记录我的函数,并包括了#'@import dplyr。通常在我的函数中,当我从包中调用特定函数时,我使用dplyr::function。但是,我不确定如何使用类似的结构来阻止此错误: Error in data %>% dplyr::group_by(dir.binned) %>% dplyr::summarise(count = n()) %>% : could not find functio

我创建了一个使用包“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))
T\u数据%
dplyr::分组依据(定向装箱)%>%
dplyr::摘要(count=n())%>%
dplyr::mutate(y=count/sum(count))
有人知道解决此错误的最佳方法吗


谢谢

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

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

#' @importFrom dplyr %>%
您也可以从“magrittr”包中导入管道操作符,而“dplyr”(当前)就是从这个包中导入管道操作符的。但是,这会给包添加另一个直接依赖项,这与尽可能合理地最小化包的依赖项的想法背道而驰。诚然,您的包当前(传递性)仍然依赖于“magrittr”,但如果“dplyr”决定实现自己的管道操作符(或从其他地方导入),此传递性依赖关系将发生变化

另一种方法是在您自己的包中为操作员别名:

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

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

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

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

#' @importFrom dplyr %>%
您也可以从“magrittr”包中导入管道操作符,而“dplyr”(当前)就是从这个包中导入管道操作符的。但是,这会给包添加另一个直接依赖项,这与尽可能合理地最小化包的依赖项的想法背道而驰。诚然,您的包当前(传递性)仍然依赖于“magrittr”,但如果“dplyr”决定实现自己的管道操作符(或从其他地方导入),此传递性依赖关系将发生变化

另一种方法是在您自己的包中为操作员别名:

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

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

%>%是magrittr的导出对象(?magrittr::
%>%
),因此我还需要导入magrittr?是的。您需要导入magrittr。这是否回答了您的问题?作为旁注,还有一个
dplyr::`%%>%%`
%%>%是magrittr的导出对象(?magrittr::
%%>%
),因此我还需要导入magrittr?是的。您需要导入magrittr。这是否回答了您的问题?作为旁注,还有一个
dplyr::`%>%`