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

mat*_*fee 9 r

我正在尝试测试包中是否存在特定的变量或函数.例如,假设我想测试一个名为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特定包吗?)

(是的,我可以将上面的两行合并到第一个测试plotgraphics,然后询问模式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)

  • `getFromNamespace( 'parse_formula',NS = 'reshape2')` (2认同)
  • @agstudy`exists('parse_formula',where = asNamespace('reshape2'),mode ='function')` (2认同)

42-*_*42- 7

 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)