3
저는 최근에 Rcpp 코딩을 많이 해왔고 저를 혼란스럽게하는 것을 발견했습니다. 필자는 주어진 함수가 호출 될 때 특정 매개 변수의 복사본을 생성 한 다음 함수가 완료되면 해당 변수가 파괴된다는 인상하에있었습니다. 그러나, 나는 때로는 나타나지 않는 List
유형으로 작업 할 때를 발견했습니다. 어떤 경우에는 다른 기능의 목록 요소를 수정해야하지만 '상위'범위의 목록을 변경하지 않고 유지해야 할 수도 있습니다. 여기서 문제 입증하는 매우 단순화 된 예이다Rcpp 매개 변수 범위가 전파됩니까?
Test.cpp에
//[[Rcpp::export]]
int list_length(List myList){
// some sort of modification that could be needed locally
for (int w=0; w < myList.size(); w++) {
myList[w] = 13;
}
// return whatever metric
return myList.size();
}
//' @export
//[[Rcpp::export]]
SEXP list_int(List myList){
// only want the int output from function
int out = list_length(myList);
return(List::create(myList,
wrap(out)));
}
test.R는
# create simple list
myList <- as.list(seq(4))
# call Rcpp function
list_int(myList)
# output
[[1]]
[[1]][[1]]
[1] 13
[[1]][[2]]
[1] 13
[[1]][[3]]
[1] 13
[[1]][[4]]
[1] 13
[[2]]
[1] 4
시피 목록이 함수 위의 범위에서 수정 . 내가 여기서 뭔가를 놓치고 있니?
감사합니다. Dirk, 친절하게도 그러한 문서를 안내해 주시겠습니까? 이 정보만으로는 크게 도움이되지 않습니다. 나는 여전히 함수 내에서 목록을 어떻게 수정하는지 알 수 없다. 죄송합니다. 간단하다면 C++ 프로그래밍에 익숙하지 않습니다. – cdeterman
'Rcpp proxy object'용어 등을 언급하는 토론을 위해 깊은 복사를 강요하는'Rcpp :: clone()'에 대한 토론을 검색 할 수 있습니다.이 6 년 동안 메일 링리스트 전체에 걸쳐있었습니다. 마지막으로, [Rcpp에 대한 책] (http://www.rcpp.org/book/)이 있습니다. –
Dirk에게 감사드립니다. 소스를 더 철저하게 탐구 할 것입니다. – cdeterman