2

我知道之前在 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并且必须假设两者都在同一个包中。*看起来很害羞*

4

1 回答 1

1

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

isTRUE("setTimeLimit" %in% ls(getNamespace("base"), all.names=TRUE))
于 2013-04-12T03:11:32.117 回答