주어진 값으로 벡터 생성하기
벡터를 먼저 정의한 뒤 요소를 나중에 채우는 대신, ::create()를 사용하면 한 줄의 코드로 벡터를 생성하면서 값까지 지정할 수 있어요. 이는 벡터 변수의 메서드가 아니라 벡터 타입 자체의 메서드인, 정적 멤버 함수입니다. create로 최대 20개의 요소까지 지정할 수 있어요. (더 긴 벡터는 여러 줄의 코드로 작성해야 합니다.)
다음 코드는 원주율, e, 무한대를 포함하는 숫자 벡터 important_numbers를 생성합니다.
NumericVector numbers = NumericVector::create(PI, exp(1), INFINITY);
::create는 이름이 있는 벡터를 만들 때도 사용할 수 있습니다. 요소에 이름을 붙이는 문법은 _["name"] = value입니다. 아래는 같은 코드를 요소에 이름을 붙여 다시 작성한 예시입니다.
NumericVector numbers = NumericVector::create(_["pi"] = PI, _["e"] = exp(1), _["inf"] = INFINITY);
R과 마찬가지로, 서로 다른 타입의 변수를 하나로 묶고 싶다면 리스트를 사용합니다. Rcpp에서는 타입 이름이 대문자로 시작하며, List를 사용합니다.
이 연습은 강의의 일부입니다
Rcpp로 R 코드 최적화하기
연습 안내
- 여러 벡터를 생성하는 함수
create_vectors()의 정의를 완성하세요.- 이름이 없는 문자 벡터
polygons를 생성하고, 값은 순서대로"triangle","square","pentagon"으로 하세요. - 이름이 있는 정수 벡터
mersenne_primes를 생성하고, 값은 순서대로3,7,31로 하세요. 이름은 각각"first","second","third"로 하세요. - 이름이 있는 리스트
both를 생성하고,polygons와mersenne_primes를 그 순서대로 포함하세요. 이름도 각각polygons와mersenne_primes로 하세요.
- 이름이 없는 문자 벡터
실습형 인터랙티브 연습
이 예제를 이 샘플 코드를 완성하여 풀어보세요.
#include
using namespace Rcpp;
// [[Rcpp::export]]
List create_vectors() {
// Create an unnamed character vector
CharacterVector polygons = CharacterVector::___("___", "___", "___");
// Create a named integer vector
IntegerVector mersenne_primes = ___(_["___"] = ___, ___, ___);
// Create a named list
List both = ___(___, ___);
return both;
}
/*** R
create_vectors()
*/