R和C库/BLAS/OSX之间的接口
我正在编写一些C程序(我是C的初学者),我从R编译和调用这些程序。为了尽可能地提高效率,我尝试使用Lapack和BLAS中尽可能多的函数(它们包含执行基本操作的高度优化的例程) 我编译我的.c代码时,经典的做法是:R和C库/BLAS/OSX之间的接口,c,r,macos,C,R,Macos,我正在编写一些C程序(我是C的初学者),我从R编译和调用这些程序。为了尽可能地提高效率,我尝试使用Lapack和BLAS中尽可能多的函数(它们包含执行基本操作的高度优化的例程) 我编译我的.c代码时,经典的做法是: system ('R CMD SHLIB blablabla.c') 以下是我的平均.c代码的“前言”: #include <math.h> #include <stdio.h> #include <string.h> #include <
system ('R CMD SHLIB blablabla.c')
以下是我的平均.c代码的“前言”:
#include <math.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <R_ext/blas.h>
#include <R_ext/Lapack.h>
#包括
#包括
#包括
#包括
#包括
#包括
这是我的“虚拟”问题:我需要计算“实向量的argmin”,即向量最小分量的索引(实际上,对于大向量和很多次,因此我真的喜欢使用优化例程,而不是基本的“for”循环)。
“不幸的是”,在“R_ext/blas.h”中,函数IDMIN没有出现(“R_ext/blas.h”只包含函数IDAMAX,该函数返回最大绝对值分量的索引)
在R中,这样的任务很容易通过“which.min()”(我猜,这是基于优化的代码)实现的,所以我猜它应该“在某个地方”存在实现此任务的C代码(当然是基于FORTRAN代码),而这正是我需要的
换句话说:我应该在“.c preamble”中添加什么库?我应该使用什么样的c函数才能在我的c代码中使用“optimized which.min()”(我从R编译和调用的代码)
另一个问题:在MacOSX上,如何将一些C库添加到现有的R的C库中(仍然是为了从R编译和使用C,这在我看来非常方便)
谢谢 在艾根或犰狳身上可能有这样的东西。既然我建议无论如何都要使用Rcpp,那么您应该查看它们并使用RcppEigen或RcppArmadillo.Agreed。我99%肯定这已经在RcppEigen了。是的,是的。有了(Rcpp)犰狳,你可以免费得到拉帕克(正如它所派遣的),而(Rcpp)艾根有它自己的替代品。你真的应该使用RCPP*家族,因为它让你的生活变得更容易---如果你愿意,你仍然可以在里面写C(尽管我认为这是误导的:)谢谢你的建议(我不确定真的理解,但这是另一个问题;-)。实际上,我对Lapack没有任何问题,我的问题是R_ext/blas.h不包含R中的等价物,而R中的.min(。。。那么,R是如何进行的呢?在艾根或犰狳身上可能有这样的东西。既然我建议无论如何都要使用Rcpp,那么您应该查看它们并使用RcppEigen或RcppArmadillo.Agreed。我99%肯定这已经在RcppEigen了。是的,是的。有了(Rcpp)犰狳,你可以免费得到拉帕克(正如它所派遣的),而(Rcpp)艾根有它自己的替代品。你真的应该使用RCPP*家族,因为它让你的生活变得更容易---如果你愿意,你仍然可以在里面写C(尽管我认为这是误导的:)谢谢你的建议(我不确定真的理解,但这是另一个问题;-)。实际上,我对Lapack没有任何问题,我的问题是R_ext/blas.h不包含R中的等价物,而R中的.min(。。。那么,R是如何进行的呢?