C 使用testthat对带有编译代码的R包进行单元测试

C 使用testthat对带有编译代码的R包进行单元测试,c,r,C,R,我目前正在开发一个R包,其中大部分计算工作是用C代码完成的。特别是,我有几个复杂的C例程,然后用R函数对它们进行包装。我知道我可以使用testthat测试这些,因为名称空间包含调用的C函数(我使用roxygen注释生成名称空间) 我遇到的困难是,其中一些C例程有一些复杂的子例程,它们的输出很难检查。这些函数从不直接从R调用,因此在我的R/目录中没有代码具有roxygen注释,从而导致命名空间使这些函数可用。我想做的是编写一个执行相同计算的R例程,然后使用testthat与C函数的输出进行比较。我

我目前正在开发一个R包,其中大部分计算工作是用C代码完成的。特别是,我有几个复杂的C例程,然后用R函数对它们进行包装。我知道我可以使用testthat测试这些,因为名称空间包含调用的C函数(我使用roxygen注释生成名称空间)

我遇到的困难是,其中一些C例程有一些复杂的子例程,它们的输出很难检查。这些函数从不直接从R调用,因此在我的R/目录中没有代码具有roxygen注释,从而导致命名空间使这些函数可用。我想做的是编写一个执行相同计算的R例程,然后使用testthat与C函数的输出进行比较。我已经这样做了,当我加载整个共享库(使用dyn.load)时效果很好,但我认为这不是我打算提交给CRAN的包中测试的正确方法

我当前的解决方法是在我的R/目录中的文件中创建一个伪函数,然后为我希望加载的每个函数创建一个roxygen注释。这样,当我运行devtools::document()时,这些函数都包含在名称空间中


这是最好的方法,还是有其他更好/首选的方法?

提交给CRAN时,人们忽略一些测试并不罕见。任何涉及多核/多线程计算的东西都受到CRAN限制为2个线程的限制。没有任何东西可以阻止你离线运行任何测试,并且将CRAN测试仅限于R功能。感谢您的回复--我担心的是,如果没有对其中一些子例程进行测试,则会导致提交被CRAN接受的问题,因为我的代码中最有可能存在错误的部分是这些子例程,它们从未直接从RTo后续调用过,如果我想在本地运行这些测试,并希望能够在R studio中与所有其他testthat单元测试一起运行它们,那么我在文章中提到的方法是实现这一点的最佳方法吗?还是有一个我不知道的更好的?