我正在尝试在RcppArmadillo中编写一个将行动态附加到数组/矩阵的函数。它应该像rbind
在R或Pythonpandas.concat
中一样工作。(我依靠C++来提高效率。)
我的具体目标是接收一个名为的向量foo
并生成一个三列矩阵my_matrix
,其中每一行都由某些条件确定。因为需要检查每个三元组 {i,j,k} 的条件,所以它涉及一个三元组循环。这是我到目前为止所拥有的(大写字母中的文字是我在此处包含的评论):
/* (From my RcppArmadillo script) */
arma::mat myFunction(arma::vec foo) {
int n = foo.size();
// initialize first row of column names
arma::vec my_matrix[] = {"i", "j", "k"};
// loop and append rows
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
for(int k = 0; k < n; k++) {
if (SOME CONDITION ABOUT i,j,k and foo) {
APPEND ROW {i,j,k} TO my_matrix
arma::vec new_row = {i,j,k};
my_matrix = join_vert(my_matrix, new_row);
}
}
}
}
return my_matrix;
}
我面临三个问题:
- 在线上
arma::vec new_row = {i,j,k};
,有人告诉我“在初始化列表中,非常量表达式不能从'int'类型缩小到'double' ” - 在线上
my_matrix = join_vert(my_matrix, new_row);
,我被告知“没有匹配函数调用'join_vert' ” - 在线上
return my_matrix;
,有人告诉我“从 'arma::vec [3]' 到 'arma::Mat'(又名 'Mat<<>>')没有可行的转换”
因为我不熟悉C++(尤其是涉及迭代修改的问题 2 和 3),所以我被卡住了。这里有人可以帮助解决问题吗?提前致谢!