【发布时间】:2018-08-29 21:59:52
【问题描述】:
我是 Rcpp 的新手,我正在尝试确定如何访问输入的维度名称,以便稍后在脚本中使用它们。具体来说,我试图从 Armadillo 中的稀疏矩阵中获取列名,并使用它们来命名单独对象中的行。
举例说明: 让我们从生成一个平凡的稀疏矩阵开始。
input_mat <- Matrix::Matrix(sample(c(0,1), 35, replace =T)
,nrow = 5
,ncol = 7
,dimnames = list(LETTERS[1:5], letters[1:7]))
接下来,让我们用它在 Rcpp 中做一些事情。我们将输出一个填充了一些随机数的数字矩阵。输出的 nrow = 输入的 ncol。
cppFunction('NumericMatrix map_columns(arma::sp_mat x, int k) {
int n = x.n_cols;
NumericMatrix new_mat = NumericMatrix(n, k);
for(int i = 0; i < n; i++) {
for(int j = 0; j < k; j++) {
new_mat(i,j) = rand() % 100 + 1;
}
}
rownames(new_mat) = CharacterVector::create("a", "b", "c", "d", "e", "f", "g");
return(new_mat);
}', depends = "RcppArmadillo"
)
map_columns(input_mat, 4)
我不想手动指定 new_mat 的行名,而是想获取 x 的列名并动态分配名称。我尝试访问稀疏矩阵的插槽名称,并尝试以与 R 中相同的方式分配它们,但没有运气。
我猜我犯了一个简单的错误。有人可以帮我解决这个问题吗?任何帮助将不胜感激。
【问题讨论】: