在下面的代码中,我试图从正态分布中生成一个值为NumericVector
的值,其中每次调用rnorm()
时每次都有不同的均值和方差。将长度为1的NumericVector的rnorm输出转换为double?
下面是代码:
// [[Rcpp::export]]
NumericVector generate_ai(NumericVector log_var) {
int log_var_length = log_var.size();
NumericVector temp(log_var_length);
for(int i = 0; i < log_var_length; i++) {
temp[i] = rnorm(1, -0.5 * log_var[i], sqrt(log_var[i]));
}
return(temp);
}
那是给我找麻烦该生产线是这一个:
temp[i] = rnorm(1, -0.5 * log_var[i], sqrt(log_var[i]));
它会导致错误:
assigning to 'typename storage_type<14>::type' (aka 'double') from incompatible type 'NumericVector' (aka 'Vector<14>')
因为我m从rnorm
返回一个号码,有没有办法将此转换成NumericVector
返回t ype到double
?
非常好!谢谢你的洞察力。我其实是想出了你的选项2,但选项1给了我一些关于我的代码的其他部分的想法!我很好奇,为什么你说第一个选项会更快? –
**选项2 **创建一个新的'NumericVector',通过调用** Option 1 **来填充它,然后需要子集操作。 – coatless
谢谢你的解释。你能告诉我为什么你的Option 1 rnorm只有两个参数吗?为什么第一个参数中没有1?同样,你能指出我使用R ::的好资源的方向吗? –