用给定值创建向量
与其先定义一个向量再逐个填充值,您可以使用 ::create() 在一行代码中创建向量并指定其元素值。这是一个"静态成员函数",也就是说,它是向量类型本身的方法,而不是某个向量变量的方法。使用 create 最多可指定 20 个元素。(更长的向量需要多行代码。)
下面的代码创建了一个数值向量 important_numbers,包含圆周率 pi、e 和无穷大。
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()
*/