【发布时间】:2014-03-13 11:44:54
【问题描述】:
我是 R 语言领域的新手,但我需要在我的 C++ 代码中通过 irlba 计算奇异值分解。为此,我使用 RInside lib。
RInside R(argc, argv);
std::string cmd = "S<-diag(3)";
R.parseEval(cmd);
R.parseEval("B<-svd(S,nu=dim(S)[1],nv=dim(S)[2])");
Rcpp::List V ((SEXP)R.parseEval("B$v"));
现在我需要将我的结果从带有奇异向量的 Rcpp::List 转换为 std::vector
问题: 将执行 svd 的结果转换为 std::vector 的最佳方法是什么?
如何将我写为 std::vector 的输入矩阵转换为适合将其用作 irlba 中 svd 函数的输入参数的格式?
【问题讨论】:
-
你想要
Rcpp::as< std::vector<double> >(V),我相信。但是为什么要将B$v的结果存储在Rcpp::List中——这本身不是NumericMatrix(NumericVector)吗? -
非常感谢,它确实有效。但我仍然不知道如何将 std::vector 转换为“R 语言的矩阵类型”。我的意思是,当我使用 std::vector
x(9, 0.f); x[0] = 1; x[4] = 1; x[8] = 1; R["S"] = Rcpp::wrap(x); R.parseEval("B