【问题标题】:Access (exporting) function from namespace从命名空间访问(导出)函数
【发布时间】: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 实现对maptoolsgpclib 的依赖的方式,这只是ggplot 的这个(和其他一些)特定用途所必需的。
  • setTimeLimitR.utils 包中吗? "setTimeLimit"%in%ls(getNamespace("R.utils"),all.names=TRUE)FALSE。我在base 包中看到它。 (即 R 2.15.1)

标签: r namespaces


【解决方案1】:

我只是发布此问题以防止问题显示为未回答,但很高兴接受另一个问题...

isTRUE("setTimeLimit" %in% ls(getNamespace("base"), all.names=TRUE))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-18
    • 2021-07-26
    • 2015-03-17
    • 1970-01-01
    • 2017-10-24
    • 2011-09-26
    • 2015-01-08
    • 2021-02-26
    相关资源
    最近更新 更多