我想将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