유연한 크기의 arma 벡터 할당 - 일반적으로 사실입니까, 아니면 Rcpp의 속성입니까?
-
21-12-2019 - |
문제
나는 Rcpp 패키지를 사용하여 대부분이 C++로 작성되고 더 작은 비율이 R로 작성된 코드를 작성하고 있습니다.
내가 C++에서 알고 있는 바에 따르면 R과 달리 C++의 모든 변수는 미리 선언되어야 하며 이 선언에는 유형과 크기가 모두 포함됩니다.예를 들어 우리가 다음과 같이 말할 때:
arma::vec test(2);
그런 다음 테스트는 크기가 2인 아르마딜로 벡터라고 가정합니다. 즉, 테스트할 크기가 다른 어떤 것도 할당해서는 안 된다는 뜻입니다.그렇죠?
내 도전은 다음과 같습니다.
내 코드에는 "테스트 벡터"에 다른 크기(보통 2보다 큼)의 벡터를 할당하는 루프가 있습니다. 없이 테스트 재선언 .놀랍게도 코드는 컴파일 오류 없이 완벽하게 작동합니다!
각 반복에서 테스트할 새 벡터를 할당하는 방법은 다음과 같습니다.
test = Rcpp::as<arma::vec>(myList["aVecFromMyList"]);
질문:
처음에 크기 2로 선언된 테스트에 서로 다른 길이의 벡터를 할당할 수 있는 Armadillo 기능인가요?아니면 Rcpp 패키지 기능인가요?
도움을 주셔서 대단히 감사합니다.
해결책
당신은 벡터의 크기를 유형.어떤 것이 유형이라고 지정할 때 arma::vec
, 당신은 그것이 수락하도록 허용합니다 arma::vec
어떤 크기든지요.
유형에 크기 제한을 적용하려면 다음과 같은 것을 원합니다. arma::vec::fixed<N>
, 귀하의 경우에는 N
2가 될 것이다.이는 벡터의 크기가 일정해야 한다는 제약 조건을 적용하는 유형입니다. N
.낮은 숫자 버전에 대한 typedef도 있습니다. vec2
크기 2의 고정 벡터로.
당신은 당신을 수정해야 할 것입니다 as
비슷하게 전화해 보세요. 작동하길 바라지만 테스트하지는 않았습니다.
당신은 읽어야합니다 아르마딜로 문서;Armadillo 문서는 아마도 가장 깨끗하고 유용한 문서일 것입니다.