c - .C 到 R 的接口(interface)

标签 c windows r

我正在遵循本指南: http://www.biostat.jhsph.edu/~rpeng/docs/interface.pdf

我想创建用 C 编译的代码以便在 R 中使用它 所以我创建了我的 hello.c 文件:

#include <R.h>
void hello(int *n)
{
int i;
for(i=0; i < *n; i++) {
Rprintf("Hello, world!\n");
}
}

我把它保存在 c:\temp 完成后,我必须编译 C 代码。

老实说,我不知道我在做什么,但我想在 Windows cmd 中编写:

cd C:\Program Files\R\R-3.0.2\bin\
R CMD SHLIB c:\temp\hello.c

我得到了错误:

cygwin warning: MS-DOS style path detected: C:/PROGRA~1/R/R-30~1.2/etc/i386/Makeconf Preferred POSIX equivalent is: /cygdrive/c/PROGRA~1/R/R-30~1.2/etc/i386/Makeco nf CYGWIN environment variable option "nodosfilewarning" turns off this warning. Consult the user's guide for more details about POSIX paths: http://cygwin.com/cygwin-ug-net/using.html#using-pathnames make: * No rule to make target c:\temp\hello.o', needed byc:\temp\hello.dll '. Stop.

这应该创建一个名为“hello.so”的文件。所以我可以在 R 中调用它:

        dyn.load("hello.so")

        hello2 <- function(n) {
                                .C("hello", as.integer(n))
                           }

        hello2(5)

但是我的命令没有创建 hello.so 文件。 也许我需要安装另一个编译器,但我无法在我使用的 PC 上安装软件。有没有办法用windows cmd来做到这一点?我的错误在哪里?

最佳答案

假设 C:\temp\hello.c 存在,请从 Windows cmd 行尝试此操作(仔细检查 Rtools、R 和使用的路径是否存在):

cd c:\temp
path C:\Rtools\bin;C:\Rtools\gcc-4.6.3\bin;%ProgramFiles%\R\R-3.0.2\bin\x64;%path%
R CMD SHLIB hello.c
Rgui

现在在 R 中:

dyn.load("hello.dll")
.C("hello", 3L)

注意:这里还有一些批处理文件可能会有所帮助:

http://batchfiles.googlecode.com

http://code.google.com/p/batchfiles/source/browse/#svn%2Ftrunk

请参阅 Rpathset.batR.bat 和文档 batchfiles.md

更新更正和改进。

关于c - .C 到 R 的接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25609962/

相关文章:

C: 数组指针指向自己的地址同时携带一个值?

c++ - 为什么游戏引擎更喜欢静态库而不是动态链接库

c - 使用 res_nmkquery() 连接到仅限 ipv6 的 DNS 服务器

r - 如何为因子变量的每个级别应用函数?

r - 按值过滤列表的列表

c - 为什么在启用 GCC 优化的情况下,这段代码使用 strlen 的速度要慢 6.5 倍?

java - MySQL prepareStatement Batch 慢

Python,Colorama,将颜色代码分配给变量

c# - 适用于 Windows x64 上大文件的良好 ISAM 库或其他简单文件管理器

r - 如何通过标记x轴的特定部分来绘制正态分布?