我最近接触到了“box”包,并认为将我的函数合并到一个单独的 r 脚本中真是太好了,我可以使用它将它们导入到其他脚本中
box::use(folder/myFunctionScript\[functionName\] #where myFunctionScript is actually an R-script (myFunctionScript.R)
我创建了包含可以导出的函数的 R 脚本。 简单的函数使用基本函数可以正常工作,甚至调用其他包中的特定函数(例如 stats::qt())也可以正常工作,但是当我想使用 magrittr 的管道运算符(%>%)时,它会崩溃,并且我找不到任何让它发挥作用的方法。 我真的很想保留使用管道运算符的能力,但我就是想不通。
我见过一些在包内工作的解决方案,但似乎在 roxygen2 和 box 模块中不起作用。 也就是说,这是我第一次尝试构建这样的东西。 所以,也许我只是错误地应用了解决方案。
我尝试了各种方法,包括:
usethis::use_import_from("magrittr","%>%")
#' @importFrom
#' @import magrittr # doesn't matter, still doesn't recognize %>%
devtools::document() #apparently needs to be inside of a package or project
box::use(magrittr) # doesn't matter, still doesn't recognize %>%
R 的基础管道运算符 '|>' 仍然无法正常工作,因为它无法嵌套
这是我正在处理的实际代码。 不知道如何简化,因为例如基管会导致问题
caret::knnreg()
函数需要一个 y 参数,当该函数只是从我从中获取它的脚本运行时,它通常不会要求它。
#' @export
fun_KnnByK <- function(data = ISLR2::Boston, k.in = 30, LineColor = "blue",
predx.fun = data.frame(lstat = seq(2, 37, len=201))){
box::use(magrittr)
# This is training on the full dataset:
knn_fit.fun <- data %>% #using the Boston dataset
caret::knnreg(formula = medv ~ lstat, #response variable medv. Predictor variable is lstat
data = ., #Boston
k = k.in) # using the 30 nearest neighbors
return(knn_fit.fun)
} #end fun_KnnByK
当我在原始脚本中使用它时,我希望该函数能够像平常一样运行
这对我有用
box::use(./knn)
knn$fun_KnnByK()
## 30-nearest neighbor regression model
其中 knn.R 位于当前目录并包含:
#' @export
fun_KnnByK <- function(data = ISLR2::Boston, k.in = 30, LineColor = "blue",
predx.fun = data.frame(lstat = seq(2, 37, len=201))){
box::use(stats[...])
# box::use(magrittr)
# This is training on the full dataset:
knn_fit.fun <- data |> #using the Boston dataset
caret::knnreg(formula = medv ~ lstat, #response variable medv. Predictor variable is lstat
data = _, #Boston
k = k.in) # using the 30 nearest neighbors
return(knn_fit.fun)
} #end fun_KnnByK