【发布时间】:2012-08-27 08:02:29
【问题描述】:
我知道here on SO 之前有人问过类似的问题,但那里给出的解决方案似乎不适用于我的情况。
我试图通过引用从其他命名空间导出的函数并避免在函数中使用 require() 来遵循创建包的约定。
我基本上是在试图防止一个函数运行时间过长。例如,
fun <- function(i){
require(R.utils)
setTimeLimit(elapsed=10, transient=TRUE) # prevent taking more than 10secs
return(i^i)
}
>fun(10)
工作正常,但如果我尝试:
require(R.utils)
fun <- function(i){
R.utils:::setTimeLimit(elapsed=10, transient=TRUE) # prevent taking more than 10secs
return(i^i)
}
>fun(10)
我明白了:
Error in get(name, envir = asNamespace(pkg), inherits = FALSE) :
object 'setTimeLimit' not found
将::: 更改为:: 不会改变这种行为。
我愿意接受任何更简单的方法来实现相同的目标。
在函数中调用require() 真的很糟糕吗?
非常感谢!
编辑: 如果导入有效,那就太好了,谢谢。仍在开发中,所以想确保它会没事。
编辑:
抱歉,它在基地里。不知道我是怎么错过的;我最初使用的是R.utils::evalWithTimeout,并且必须假设两者都在同一个包中。 *看起来很害羞*
【问题讨论】:
-
为什么不直接将 R.utils 添加到您的 Imports 中?
-
在函数调用中包含
require将是允许R.utils成为suggests而不是imports依赖项的一种方式。看看ggplot2:::fortify.SpatialPolygonsDataFrame实现对maptools和gpclib的依赖的方式,这只是ggplot 的这个(和其他一些)特定用途所必需的。 -
setTimeLimit在R.utils包中吗?"setTimeLimit"%in%ls(getNamespace("R.utils"),all.names=TRUE)是FALSE。我在base包中看到它。 (即 R 2.15.1)
标签: r namespaces