- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在将 R 函数转换为 Rcpp,其中我使用了 R 函数 rowSums
,这似乎不是 Rcpp 中的有效糖表达式。我找到了 Rcpp 版本的 rowSums 的代码 here .但我得到
error: use of undeclared identifier
rowSumsC()
在我的主要 Rcpp 函数中。
cppFunction(
"NumericMatrix Expcpp(NumericVector x, NumericMatrix w,
NumericVector mu, NumericVector var, NumericVector prob, int k) {
for (int i=1; i<k; ++i){
w(_,i) = prob[i] * dnorm(x,mu[i], sqrt(var[i]));
}
w = w / rowSums(w)
return w;
}")
最佳答案
Rcpp officially added rowSum
support in 0.12.8 .因此,没有必要使用 rowSumsC
Hadley 在 Advanced R 中设计的函数。
话虽如此,代码存在一些问题。
Rcpp 目前不支持 Matrix
至 Vector
或 Matrix
至 Matrix
计算。 (可以根据 #583 添加对后者的支持,但如果需要,应考虑使用 RcppArmadillo
或 RcppEigen
)。因此,以下行是有问题的:
w = w / rowSums(w)
rowSums
然后使用传统的
for
对矩阵进行标准化环形。
注:与 R 不同,C++ 中的循环非常快。
NumericVector summed_by_row = rowSums(w);
for (int i = 0; i < k; ++i) {
w(_,i) = w(_,i) / summed_by_row[i];
}
0
开始不是
1
.因此,以下 for 循环是有问题的:
for (int i=1; i<k; ++i)
for (int i=0; i<k; ++i)
NumericMatrix Expcpp(NumericVector x, NumericMatrix w,
NumericVector mu, NumericVector var, NumericVector prob, int k)
NumericMatrix Expcpp(NumericVector x, NumericVector mu, NumericVector var, NumericVector prob) {
int n = x.size();
int k = mu.size();
NumericMatrix w = no_init(n,k);
.....
Rcpp::cppFunction(
'NumericMatrix Expcpp(NumericVector x, NumericVector mu, NumericVector var, NumericVector prob) {
int n = x.size();
int k = mu.size();
NumericMatrix w = no_init(n,k);
for (int i = 0; i < k; ++i) { // C++ indices start at 0
w(_,i) = prob[i] * dnorm(x, mu[i], sqrt(var[i]));
}
Rcpp::Rcout << "Before: " << std::endl << w << std::endl;
NumericVector summed_by_row = rowSums(w);
Rcpp::Rcout << "rowSum: " << summed_by_row << std::endl;
// normalize by column to mimic R
for (int i = 0; i < k; ++i) {
w(_,i) = w(_,i) / summed_by_row[i];
}
Rcpp::Rcout << "After: " << std::endl << w << std::endl;
return w;
}')
set.seed(51231)
# Test values
n <- 2
x <- seq_len(n)
mu <- x
var <- x
prob <- runif(n)
mat <- Expcpp(x, mu, var, prob)
Before:
0.0470993 0.125384
0.0285671 0.160996
rowSum: 0.172483 0.189563
After:
0.273066 0.661436
0.165623 0.849300
关于r - 如何在 rcpp 中计算 rowSums,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41947825/
我正在尝试学习如何在 R 中使用 across() 函数,我想用它做一个简单的 rowSums()。但是,我不断收到此错误: Error: Problem with mutate() input ..
我是 r 的新手,有一个看起来很简单的问题。我想做 rowSums 但只包含在特定范围内的总和值(例如,高于 0)。 例如- 最后一列是请求的金额 col1 col2 col3 col4 t
问题 有没有函数,或者获取rowSums的方法只处理一列? 示例数据 col1 rowSums function (x, na.rm = FALSE, dims = 1L) { if (is
我很确定这很简单,但是似乎卡住了...我有两个xts向量已经合并在一起,其中包含数值和NA。 我想获取每个索引周期的rowSums,但要保留NA值。 以下是可重现的示例 set.seed(120) d
我正在尝试获取 R 中某行的矩阵中的列总和。但是,我不希望对整行求和,而只希望对指定数量的列进行求和,即在这种情况下对角线上方的所有列。我尝试过 sum 和 rowSums 函数,但它们要么给我奇怪的
考虑到这是我的数据集 df % mutate( group1_total % group_by(Group) %>% mutate(total = rowSums(sele
我目前正在使用 R 尝试为 DF 创建具有前一列总和的多列。想象一下我有一个这样的 DF: df= sep-2016 oct-2016 nov-2016 dec-2016 j
考虑到这是我的数据集 df % mutate( group1_total % group_by(Group) %>% mutate(total = rowSums(sele
这个问题在这里已经有了答案: rowSums but keeping NA values (4 个回答) 关闭6年前。 df <- data.frame(a = c(1, 1, NA, 0, 1, 0
假设我有一个数据框,其中有一列用于汇总数据。如果列 a、b 或 c 中的任何值不为零,那么在新列中返回二进制 0 或 1 的最有效方法是什么? rowSums 可以作为总数,但如果有任何不同的值,我还
我正在尝试为矩阵中的每个单元格条目写入最小的值,无论是其行和值还是相同维度的新矩阵中的列和值。 例如: 假设我的矩阵 c 看起来像这样: x <- matrix(seq(1:6),2) x
我正在尝试使用 rowSums,但使用条件值的比较。 这是我的数据框示例,基于调查。行代表参与者,列代表 child 的出生日期。 b3_01 b3_02 b3_03 b3_04 b3_05 b3
我有一个大列表,我想对该列表的每个对象中的每一行执行 rowSums。 这是我的: > DFTYPE [[1]] [[1]][[1]] DGDG.36.5 DGDG.36.6 1 978.490
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 9
这个问题在这里已经有了答案: aggregating multiple columns in data.table (2 个回答) 8年前关闭。 正在寻找一种简单的方法来获取 总计约 170 个不同的
假设我有一个像这样的数据框: df row_number variable value #> 1: 1 A.1 1 #> 2: 2
我想使用功能rowSums在 dplyr并遇到了一些数据缺失的困难。示例数据为 mtcars .目标是估计 mpg 的三个变量的总和, cyl和 disp按行。但是,当特定行中存在缺失值时,以下 R
我正在将 R 函数转换为 Rcpp,其中我使用了 R 函数 rowSums ,这似乎不是 Rcpp 中的有效糖表达式。我找到了 Rcpp 版本的 rowSums 的代码 here .但我得到 erro
类似于:mutate rowSums exclude one column但就我而言,我真的希望能够使用 select删除特定列或一组列 我试图理解为什么这种性质的东西行不通。 d % do({
我正在尝试从行计算中改变一个新变量,如下所示 rowSums iris %>% mutate_(sumVar = iris %>% select(S
我是一名优秀的程序员,十分优秀!