如果我正在编写一个 R 包,我可以使用它importFrom(plyr,colwise)
来选择性地将colwise()
函数导入我的命名空间。如果我在命令行以交互方式运行代码,有没有办法做同样的事情?
一个粗略的解决方案是加载一个包但不导入任何东西,然后编写一堆foo <- pkg::foo
分配手动导入,但我看不出如何在不首先导入的情况下加载。
如果我正在编写一个 R 包,我可以使用它importFrom(plyr,colwise)
来选择性地将colwise()
函数导入我的命名空间。如果我在命令行以交互方式运行代码,有没有办法做同样的事情?
一个粗略的解决方案是加载一个包但不导入任何东西,然后编写一堆foo <- pkg::foo
分配手动导入,但我看不出如何在不首先导入的情况下加载。
如果您发现自己反复想要使用包中相同的几个功能,最简洁的解决方案可能是创建并加载仅包含这些功能的包。
## Set up package source directory
dummy <- "" ## Need one object with which to initiate package skeleton
package.skeleton("dummy", "dummy")
## Clean up the man subdirectory
lapply(dir("dummy/man", full.names=TRUE), file.remove)
## Use NAMESPACE to pull in the functions you want
funs <- c("aaply", "ddply", "adply")
cat(paste0("importFrom(plyr, ", paste(funs, collapse=", "), ")"),
paste0("export(", paste(funs, collapse=", "), ")"),
file = "dummy/NAMESPACE",
sep = "\n")
## install the package
library(devtools)
install("dummy")
## Confirm that it worked
library(dummy)
ls(2)
# [1] "aaply" "adply" "ddply"
environment(aaply)
# <environment: namespace:plyr>
aaply(matrix(1:9, ncol=3), 2, mean)
# 1 2 3
# 2 5 8
也许我需要做的就是这个(给它实名而不是foo
让它可以运行)?
loadNamespace('zoo')
rollmean <- zoo::rollmean
rollmean.default <- zoo::rollmean.default
关于这样做的陷阱有什么评论吗?我以前没用过loadNamespace()
。