R 查看包中是否存在变量/函数?

R 查看包中是否存在变量/函数?,r,R,我试图测试包中是否存在特定的变量或函数。例如,假设我想测试名为plot的函数是否存在于包“graphics”中 以下测试函数plot是否存在,但不测试它来自哪个包: exists('plot', mode='function') 或者我可以测试graphics包中是否存在名为plot的东西,但这不能告诉我它是否是一个函数: 'plot' %in% ls('package:graphics') 有没有一个好方法可以问“在模式Z的包Y中是否存在一个名为X的对象”(基本上,我可以将存在限制为特定的

我试图测试包中是否存在特定的变量或函数。例如,假设我想测试名为
plot
的函数是否存在于包“graphics”中

以下测试函数
plot
是否存在,但不测试它来自哪个包:

exists('plot', mode='function')
或者我可以测试
graphics
包中是否存在名为
plot
的东西,但这不能告诉我它是否是一个函数:

'plot' %in% ls('package:graphics')
有没有一个好方法可以问“在模式Z的包Y中是否存在一个名为X的对象”(基本上,我可以将
存在限制为特定的包吗?)

(是的,我可以将以上两行结合起来,首先测试
plot
是否在
graphics
中,然后询问
plot
的模式,但是如果我有自己的函数
plot
屏蔽
graphics::plot
,那么我可以相信
的输出存在('plot',mode='function')

背景:为我的一个包编写测试,并希望测试各种函数是否被导出。我正在使用package
testthat
,它在一个环境中执行测试,在这个环境中,我可以看到包的所有内部函数,并且被
exists('myfunction',mode='function')
刺痛,返回true,但实际上我忘记了导出
myfunction
。我想测试各种功能是否被导出。

哦,我找到了

我注意到在
?ls
中,它说第一个参数(
“package:graphics”
对我来说)也算作一个环境
存在
其中
参数与
ls
名称
参数具有相同的文档,因此我猜
'package:graphics'
可能也适用于此:

exists('plot', where='package:graphics', mode='function')
[1] TRUE  # huzzah!
环境(绘图)
查找(“+”)
#[1] “包:基本”
查找('绘图')
#[1] “软件包:图形”
查找('plot',mode=“function”)
#[1] “软件包:图形”

这与此+1有关,但这不适用于内部函数。:,i、 e
exists('parse_-formula',where='package:restrape2',mode='function')
getFromNamespace('parse_-formula',ns='restrape2')
是的,我特别不想要内部函数……哦,我知道我在我的问题中说的是“exists”,我的意思是“exports”!oops@agstudy
存在('parse_formula',where=asNamespace('reforme2'),mode='function')
@hadley ok:)(我很确定看到这样的评论)谢谢!环境在这里有点像是在转移视线——这是
绘图
创建的环境,而不是找到它的地方。我想如果函数是泛型的,那么它肯定是在这里。如果它不是通用的,那么它不会告诉用户将首先在哪里搜索任何调用吗?请注意,
plot
的环境是
namespace:graphics
,但它可以在
package:graphics
中找到-这些是不同的环境。在(搜索函数环境)中有更多的细节,这应该非常有用。我看到你对这一资源的开发进展顺利。特别是,我曾多次尝试提高我“用语言计算”的能力,但发现各种资源在理解我的心理模型方面无效。我认为你耐心地解释这一点可能比我咨询过的其他人更有效。我正在完成函数式编程章节,下一步要扩展和重写的是语言计算。
 environment(plot)
<environment: namespace:graphics>

find('+')
#[1] "package:base"

find('plot')
#[1] "package:graphics"

find('plot', mode="function")
#[1] "package:graphics"