R从命名空间中选择性导入

时间:2013-04-30 14:26:04

标签: r namespaces package

如果我正在编写R包,我可以使用importFrom(plyr,colwise)有选择地将colwise()函数导入我的命名空间。如果我在命令行上以交互方式运行代码,有没有办法做同样的事情?

一个原始的解决方案是加载一个包但不导入任何东西,然后写一堆foo <- pkg::foo分配来手动导入,但是我看不到如何只是在没有导入的情况下加载。< / p>

2 个答案:

答案 0 :(得分:4)

如果您发现自己一再想要从包中使用相同的几个函数,那么最干净的解决方案可能是创建并加载仅包含这些函数的包。

## 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

答案 1 :(得分:1)

也许我需要做的就是这个(给它实名而不是foo以便它可以运行)?

loadNamespace('zoo')
rollmean <- zoo::rollmean
rollmean.default <- zoo::rollmean.default

有关这样做的陷阱的任何评论?我之前没有使用loadNamespace()