我正在遵循本指南: 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 by
c:\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.bat
、R.bat
和文档 batchfiles.md
。
更新更正和改进。
关于c - .C 到 R 的接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25609962/