我正在尝试测试包中是否存在特定的变量或函数.例如,假设我想测试一个名为plot"graphics" 的函数是否存在.
以下测试函数是否plot存在,但不测试它来自哪个包:
exists('plot', mode='function')
Run Code Online (Sandbox Code Playgroud)
或者我可以测试包中plot存在的东西graphics,但这并不能告诉我它是否是一个函数:
'plot' %in% ls('package:graphics')
Run Code Online (Sandbox Code Playgroud)
有没有一种很好的方式可以问"模式Z的包Y中是否存在名为X的对象"?(基本上,我可以限制exists特定包吗?)
(是的,我可以将上面的两行合并到第一个测试plot中graphics,然后询问模式plot,但是如果我有自己的功能plot屏蔽graphics::plot怎么办?我可以信任输出exists('plot', mode='function')吗?)
背景:为我的软件包编写测试,并希望测试导出的各种函数.我正在使用testthat在我可以看到包的所有内部功能的环境中执行测试的包,并且通过exists('myfunction', mode='function')返回true而被蜇,但我实际上忘记了导出myfunction.我想测试导出各种函数.
mat*_*fee 10
哦,我找到了.
我注意到?ls它说第一个参数('package:graphics'对我来说)也算作一个环境.exists" where参数具有相同的文件作为ls" name的说法,所以我猜'package:graphics'可能也在那里工作:
exists('plot', where='package:graphics', mode='function')
[1] TRUE # huzzah!
Run Code Online (Sandbox Code Playgroud)
environment(plot)
<environment: namespace:graphics>
find('+')
#[1] "package:base"
find('plot')
#[1] "package:graphics"
find('plot', mode="function")
#[1] "package:graphics"
Run Code Online (Sandbox Code Playgroud)