获取包含cppFunction函数的R文件

时间:2014-05-10 17:47:44

标签: r rcpp

获取包含cppFunction函数的文件不会编译/加载该函数。下面是具有两个函数的代码,一个函数在R函数中包装为字符串。

cat('
rcpp_iter <- function() 
{ 
  Rcpp::cppFunction(\'NumericVector func0_with_RString(NumericVector  df1,NumericVector  df2){ 
int N1 = df1.size(); 
NumericVector df3(N1); 
df3[0]=df2[0]; 

for(int i=1;i<N1;++i) 
{df3[i]=df2[i-1]+df1[i];} 

return df3; 
} 
\') 
} 


  Rcpp::cppFunction(\'NumericVector func0(NumericVector  df1,NumericVector  df2){ 
int N1 = df1.size(); 
NumericVector df3(N1); 
df3[0]=df2[0]; 

for(int i=1;i<N1;++i) 
{df3[i]=df2[i-1]+df1[i];} 

return df3; 
} 
\') 

',file='testcpp.r')
source('testcpp.r')

set.seed(100);x=sample(1:100,10)
flag0 <- c(1,0,0,1,1,1,0,0,1,0)

rcpp_iter();func0_with_RString(flag0,x)不起作用

func0(flag0,x)有效

调用func0_with_RString后,为什么rcpp_iter无效?

1 个答案:

答案 0 :(得分:4)

您的问题的答案与以下答案一致:为什么在下面的示例中找不到x

f <- function() {
   x <- 10
}

f()
print(x)
## Error: object 'x' not found

查看env的{​​{1}} arg。你可以,例如传递RCpp:cppFunction以绑定全局环境中的env=globalenv()。 但这绝对不是定义函数的正确方法(除非你只是好奇)。请参阅@ DirkEddelbuettel对此事的评论。