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

时间:2013-03-05 01:46:42

标签: r

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

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

exists('plot', mode='function')

或者我可以测试plot包中存在名为graphics的内容,但这并不能告诉我它是否是一个函数:

'plot' %in% ls('package:graphics')

有没有一种很好的方式可以问“模式Z的包Y中是否存在名为X的对象”?(基本上,我可以将exists限制在特定包中吗?)< / p>

(是的,我可以将以上两行合并到第plot位于graphics的第一次测试,然后询问plot的模式,但如果我有自己的功能怎么办? plot屏蔽graphics::plot?我可以信任exists('plot', mode='function')的输出吗?)

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

2 个答案:

答案 0 :(得分:9)

哦,我找到了。

我注意到在?ls中它表示第一个参数('package:graphics'对我来说)也算作环境。 exists'where参数与ls'name参数具有相同的文档,因此我猜测'package:graphics'也可能在那里工作:

exists('plot', where='package:graphics', mode='function')
[1] TRUE  # huzzah!

答案 1 :(得分:7)

 environment(plot)
<environment: namespace:graphics>

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

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

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