【问题标题】:Rcpp how to give vector of a given length identical values in each cellRcpp如何在每个单元格中给出给定长度的向量相同的值
【发布时间】:2021-10-17 10:17:58
【问题描述】:

在下面的代码中,vectorTest 函数的 out 受限于 Tglobe 中的项目数。如所写,输出为 101。如果 Tglobe = c(100, 101),则输出为 101, 102。

我想要做的是创建一个具有速度大小的向量并用相同的值填充它。换句话说,对于Tglobe <- 100,我希望输出为 101、102、103、104、105

#include <Rcpp.h>
using namespace Rcpp;

// [[Rcpp::export]]
Rcpp::NumericVector vectorTest(Rcpp::NumericVector Tglobe, Rcpp::NumericVector speed) {
  Rcpp::NumericVector test(speed.size(), NAN);
  test = Tglobe + speed;
  return(test);
}

/*** R
speed <- c(1,2,3,4,5)
Tglobe <- 100
vectorTest(Tglobe, speed)
*/

【问题讨论】:

  • 在函数的 arg 中将 "Rcpp::NumericVector Tglobe" 更改为 "double const& Tglobe" 是否满意?这样 cpp 就知道你想添加一个带向量的双精度数
  • 发现并基本上是我在下面的答案中所做的。但是您还需要将 Tglobe 粘贴到要分配的 ctor 中,并且由于 C++ 不会“回收”(在 R 意义上)或“广播”,因此您需要确保尺寸匹配。

标签: r rcpp


【解决方案1】:

您的问题措辞有些奇怪。所以我把它读作

  • 如何用给定的标量实例化一个向量?您已经回答了这个问题,尽管在其中添加了错误的值(NAN,甚至不是 C++ 常量)
  • 如何添加两个向量?你也已经回答了
  • 如何推广到输入向量(和返回矩阵)?留作练习。

代码

#include <Rcpp.h>

// [[Rcpp::export]]
Rcpp::NumericVector vectorTest(double globe, Rcpp::NumericVector speed) {
    Rcpp::NumericVector globevec(speed.size(), globe);
    return globevec + speed;
}

/*** R
speed <- c(1,2,3,4,5)
Tglobe <- 100
vectorTest(Tglobe, speed)
*/

输出

> Rcpp::sourceCpp("~/git/stackoverflow/68784602/answer.cpp")

> speed <- c(1,2,3,4,5)

> Tglobe <- 100

> vectorTest(Tglobe, speed)
[1] 101 102 103 104 105
> 

【讨论】:

  • @JerryN :您似乎正在养成在这里提出问题的习惯,不参与也不接受这些问题的答案。我可以提个小建议吗?这无助于获得更多或更好的答案。
  • 德克,不是我的本意。我尝试接受答案并(积极地)标记好的 cmets。我会回去看看我错过了什么。
  • 谢谢。而且我知道你并没有总是让它们挂起来,否则我会完全忽略你;-) 欣赏它。
  • 我喜欢你的回答的一个(许多)事情是你试图给出一些解释。让我感到困惑并且我还没有找到好的答案的一件事是何时使用 double 以及何时使用 NumericVector。我怀疑这与变量类型的细节有关。我实际上并不希望您直接回答这个问题,而是将我指向一些对此进行讨论的地方。您已在有关此问题的一个答案中发布了以下内容,但我正在寻找更一般的讨论。你的一个建议是你的书。 ...更多在下一条评论中
  • 这是您在较早的回答中所说的“所有 Rcpp(11) 类型都是“瘦代理对象”(我们在几个地方、谈话、幻灯片、我的书、.. .) 围绕底层的 SEXP 对象。这意味着当您从 R 转到 C++ 时,以及从 C++ 回到 R 时,不会进行任何复制。我也不好意思报告我刚刚发现了这个 - dirk.eddelbuettel.com/papers.html
猜你喜欢
  • 1970-01-01
  • 2016-10-16
  • 1970-01-01
  • 2022-06-17
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多