将 R 列表中的数值直接分配给 C++ 中的 NumericVector
Assigning a numeric value within an R List directly to a NumericVector in C++
我想将从 fisher.test 函数返回的双精度(精度浮点)值放入 R C++ 中的 2 个向量中。
如下所示分配给 double 时,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<double>sublist[0];
但 IDE 告诉我这是从不兼容的类型分配的。
能否请您帮我将置信区间的 p.value 和 lupper 边界直接分配给适当指标处的相应 NumericVectors?
我不完全清楚你的问题和例子,但我认为你的问题的一部分是你的 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
我想将从 fisher.test 函数返回的双精度(精度浮点)值放入 R C++ 中的 2 个向量中。
如下所示分配给 double 时,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<double>sublist[0];
但 IDE 告诉我这是从不兼容的类型分配的。
能否请您帮我将置信区间的 p.value 和 lupper 边界直接分配给适当指标处的相应 NumericVectors?
我不完全清楚你的问题和例子,但我认为你的问题的一部分是你的 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