2017-11-29 28 views
1

Rcpp를 사용하여 함수를 정의했으며 현재 세션에서 실행됩니다. 그래서 패키지를 구축 할 필요없이 Rcpp 기능을 공유 할 수있는 방법에 쉽게 거기에 나는 각 작업자 프로세스에서 동일한 기능을 컴파일 future 패키지를 사용하려고하지만 오류Rcpp 함수를 자식 프로세스에 전달할 수 있습니까?

Error: Error 1 occurred building shared library.

로 실행?

library(Rcpp) 
cppFunction(' 
      NumericVector test(Rcpp::NumericVector x) { 
      return x; 
      }') 

# test if compiled successful 
test(1:2) 

lapply(list(1:2), test) # works 

future_lapply(list(1:2), function(a) { 
    library(Rcpp) 
    cppFunction(' 
    NumericVector test(Rcpp::NumericVector x) { 
    return x; 
    }') 
    test(a) 
}) 
+4

당신이하고 싶은 일은 근본적으로 Rcpp 기반의 기능을'foreach'를 통해 전파하는 것과 같습니다. 요컨대, 당신은 할 수 없습니다. 그들은 "임의의"로컬 메모리 포인트에 앉아 있습니다. _ 신뢰할 수있는 유일한 방법은 패키지에 이들을 고정시키고 각 작업자에게 패키지를로드하는 것입니다. 그게 효과가있다. –

+0

포인터를 통해 위치를 공유하고 포인터를 작업자에게 전달하는 방법이 있습니까? – xiaodai

+2

문제는 전송해야하는 메모리 내용입니다. 당신은 할 수 없습니다. 그러므로 패키지. –

답변

2

이 질문에 아래

참조 MWE는 foreach, 말을 통해 Rcpp 기반 기능을 확산 정말 동일합니다. 즉, Rcpp 기반 함수를 직렬화하여 전달할 수 없습니다.

"임의"로컬 메모리 지점에 있습니다. 유일하게 신뢰할 수있는 방법은 패키지에 포장하여 각 작업자에게 패키지를로드하는 것입니다. 그게 효과가있다.