我正在尝试在RcppArmadillo中编写一个将行动态添加到数组/矩阵的函数。它应该像R中的rbind或Python中的pandas.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'(aka'Mat >')”因为我不熟悉C ++(尤其是涉及迭代修改的问题2和3),所以我陷入了困境。有人可以帮助您进行故障排除吗?提前致谢! 最佳答案 数据(通常)本机存储为列,因此添加行并不是那么明显。由于矩阵通常表示为连续向量,因此需要完整的副本(以创建要填充的“孔”)。您最好将不断增长的数据结构表示为列的集合,并让它们分别增长。这几乎是data.frame所做的。关于c++ - 在Rcpp中动态添加行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59338272/ 10-11 22:54