如何在box包模块中集成magrittr管道运算符(%>%)?
解决box模块中magrittr管道
%>%失效的问题 核心解决方法
在你的模块脚本(folder/myFunctionScript.r)中,显式导入magrittr的%>%运算符,而非仅导入magrittr包本身。box模块的命名空间是隔离的,默认不会暴露包内的运算符,必须明确指定导入。
修改后的模块脚本示例
# folder/myFunctionScript.r # 显式导入管道运算符 box::use(magrittr[`%>%`]) # 按需导入其他依赖包 box::use(caret) fun_KnnByK <- function(train_data, test_data, k_val) { train_data %>% caret::knnreg( y = .$target, x = .[, -which(names(.) == "target")], test = test_data[, -which(names(test_data) == "target")], k = k_val ) }
为什么之前的方法无效
usethis::use_import_from和@import magrittr是**R包开发(roxygen2语法)**的工具,box模块不识别这类语法。- 仅使用
box::use(magrittr)只会导入magrittr包,但不会将%>%等运算符加载到模块的命名空间中,函数无法调用到该运算符。
导入使用
保持你原来的导入方式即可:
box::use(folder/myFunctionScript[fun_KnnByK]) # 直接调用函数,管道会正常工作 fun_KnnByK(my_train, my_test, k = 5)
扩展说明
如果需要使用magrittr的其他运算符(如%<>%、%$%),可以在导入时一并指定:
box::use(magrittr[`%>%`, `%<>%`, `%$%`])
内容的提问来源于stack exchange,提问作者Chris Arnold
相关产品推荐
相关产品推荐

