【问题标题】:Assigning a numeric value within an R List directly to a NumericVector in C++将 R 列表中的数值直接分配给 C++ 中的 NumericVector
【发布时间】:2020-05-15 23:48:40
【问题描述】:

我想将从 fisher.test 函数返回的双精度浮点值放入 R C++ 中的 2 个向量中。

当分配给如下双精度时,p 值和置信区间的下限按预期工作,但对于置信区间的上限则不然:

// perform Fisher Exact test
IntegerVector v = { 1, 2, 3, 4 };
v.attr("dim") = Dimension(2, 2);
Function f("fisher.test");
List fe = f(v);
// now assign to variables
List sublist = fe["p.value"];
double pValue = sublist[0];
Rcout << "pValue:" << pValue;
sublist = fe["conf.int"];
NumericVector cis = sublist[0];
double ci_upperBound = cis[1];
Rcout << "ub:" << ci_upperBound ;

但是,如下分配给 NumericVectors 不起作用(分配了值,但不是正确的值,就好像指针未对齐一样)。

NumericVector pValues(1);
NumericVector ciLowerBounds(1);
// (then perform Fisher test as per above)
// now assign to variables
List sublist = fe["p.value"];
pValues[0] = sublist[0];
Rcout << "pValue:" << pValues[0];
sublist = fe["conf.int"];
NumericVector cis = sublist[0];
ciUpperBounds[0] = cis[1];

我曾尝试使用 pValues[0] = Rcpp::as&lt;double&gt;sublist[0];,但 IDE 告诉我这是从不兼容的类型分配的。

您能否帮我将置信区间的 p.value 和 lupper 界限直接分配给相应的 NumericVectors 在适当的索引处?

【问题讨论】:

    标签: r rcpp


    【解决方案1】:

    您的问题和示例对我来说并不完全清楚,但我认为您的部分问题是您的 List fe 的元素已经是向量(不是列表,正如您对您的 sublist 对象所假设的那样),所以你可以直接提取它们

    library(Rcpp)
    
    cppFunction(
      code = '
        SEXP test( IntegerVector v ) {
          v.attr("dim") = Dimension(2, 2);
    
          Function f("fisher.test");
          List fe = f(v);
    
          NumericVector p = fe["p.value"];
          NumericVector ci = fe["conf.int"];
    
          return List::create(
            _["p"] = p,
            _["ci"] = ci
          );
        }
      '
    )
    
    v <- 1:4
    test(v)
    # $p
    # [1] 1
    # 
    # $ci
    # [1]  0.008512238 20.296715040
    # attr(,"conf.level")
    # [1] 0.95
    

    【讨论】:

      猜你喜欢
      • 2021-08-02
      • 1970-01-01
      • 2021-07-05
      • 1970-01-01
      • 2020-06-09
      • 1970-01-01
      • 1970-01-01
      • 2017-08-30
      • 1970-01-01
      相关资源
      最近更新 更多