我知道在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
并且必须假设两者都在同一个包中。 *看起来很羞怯*
答案 0 :(得分:0)
我只是张贴这个以防止问题显示为无人接听,但很乐意接受另一个......
isTRUE("setTimeLimit" %in% ls(getNamespace("base"), all.names=TRUE))