C和R之间的交互作用

3

我有些天真的问题要问:

1)当我想在R中调用C时,我必须编写一些C代码。但有时我必须调用一个自己编写的R函数,我能在C函数中调用那个函数吗?

2)如果1)是可行的,那么如果我在循环中重复使用一个在R中编写的函数1000次,通过使用C来调用这个函数来执行循环,这会加速吗?

1个回答

5
很好的问题。简单回答:
1. 是的,你可以。R提供了基于C的API,使得许多事情成为可能,但是有点繁琐。我们认为,使用我们通过Rcpp提供的C++层会更容易。 2. 这是关键点。如果R代码是瓶颈,那么当你从C或C++调用它时,它仍然是瓶颈,因为它被调用的位置并不重要。重要的是它的相对速度。 rcpp-devel列表(链接在Rcpp页面上)有许多相关讨论;在[rcpp]标签下,你也可以在这里找到很多相关信息。

那么基本上,如果人们想要提高速度,他们不会在R函数中调用他们想要在R中调用的C函数,对吧?现在下一个问题是:在C中进行矩阵运算是否很繁琐?并且在C中是否会更快? - Honglang Wang
我通常建议的是(如果必须的话)调用一个或几个难以替代的 R 函数,然后集中精力用 C++ 核心替换计算的“核心”部分。Rcpp 使这种方法变得非常容易,并且我们已经获得了非常好的速度提升。 - Dirk Eddelbuettel
是的和是的:繁琐而快速。不过可以看看RcppArmadillo:易于使用,文档齐全,仍然非常快。我有一些博客文章和示例,谷歌应该能为您找到。 - Dirk Eddelbuettel
对于矩阵操作,Fortran可能会更加友好。因此,您需要在R中调用Fortran。 - liuminzhao

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接