- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个明显简单的问题,我需要比我开发的更快的 R 实现
我为这个例子初始化了随机种子和维度:
set.seed(1)
d1<-400
d2<-20000
d3<-50
X<-as.data.frame(matrix(rnorm(d1*d2),nrow=d1,ncol=d2))
rownames(X)<-paste0("row",1:nrow(X))
colnames(X)<-paste0("col",1:ncol(X))
u<-sample(rownames(X),nrow(X),replace=TRUE)
C<-matrix(rnorm(d3*d2),nrow=d3,ncol=d2)
rownames(C)<-sample(rownames(X),nrow(C),replace=FALSE)
system.time(
for(i in 1:nrow(C)){
indexes<-which(u==rownames(C)[i])
C[i,] <- colSums(X[indexes,])
}
)
最佳答案
您可以尝试使用 sapply
用于循环。
system.time(
C2 <- `dimnames<-`(t(sapply(match(rownames(C), u), function(x)
colSums(X[x, ]))), list(rownames(C), NULL))
)
# user system elapsed
# 20.06 0.03 20.14
stopifnot(all.equal(C, C2))
system.time(
for(i in 1:nrow(C)){
indexes <- which(u == rownames(C)[i])
C[i, ] <- colSums(X[indexes, ])
}
)
# user system elapsed
# 20.76 0.69 28.30
Unit: seconds
expr min lq mean median uq max neval cld
forloop 20.44852 20.57730 21.67771 20.74106 21.01723 29.63220 10 a
sapply 19.86707 20.17126 21.34529 20.50283 20.81254 29.73764 10 a
parallel::parSapply
来做.
system.time({
library(parallel)
cl <- makeCluster(detectCores() - 1)
clusterExport(cl, c("C", "u", "X"))
C3 <- parSapply(cl, match(rownames(C), u), function(x) colSums(X[x, ]))
stopCluster(cl)
C3 <- `dimnames<-`(t(C3), list(rownames(C), NULL))
})
# user system elapsed
# 0.81 3.16 9.82
stopifnot(all.equal(C, C3))
for
我的机器和你的一样快-环形 :)
关于r - 如何为嵌套矩阵匹配和 colSums 加速 R 中的 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56891322/
我有以下数据框 Type CA AR alpha 1 5 beta 4 9 gamma 3 8 我想获得列和行总和,使其看起来像这样: Type CA
在以下矩阵数据集中: 1 2 3 4 5 1950 7 20 21 15 61 1951 2 10 6 26 57 1952 12 27 4
使用这个命令可以得到一个数据框,其中包含每列的总和 df 1 stock 8 2 bill 2 3 bear 10 关于r - Colsum 新数据框,我们在Stack
我正在尝试为矩阵中的每个单元格条目写入最小的值,无论是其行和值还是相同维度的新矩阵中的列和值。 例如: 假设我的矩阵 c 看起来像这样: x <- matrix(seq(1:6),2) x
在下面的例子中,为什么 A 不等于 B ?问题与 Date 列有关,因为 AA=BB,但我不明白为什么... library(lubridate) MM=data.frame(ID=1:3,Date=
我在 R 中有一个数据框矩阵,我希望按列的总和降序排列。我的数据从 +1 到 -1 不等。我有这段代码可以完美地做到这一点: DF<-DF[, order(colSums(-DF))] 但是,我确实有
我正在尝试缩放矩阵中的值,以便每一列加起来为一。我试过了: m = matrix(c(1:9),nrow=3, ncol=3, byrow=T) [,1] [,2] [,3] [1,]
我们知道使用像 colMeans()、colSums() 这样的函数比使用 apply() 快得多,因为这是预编译的(在 C、C++...?) 这些函数是否也在这些语言中自动并行化? 也许并行化的开销
我需要获取所有列的 col sum 并将结果放在一个数据框中,colnames 和它们的总和为两列。但是如果我这样做,列名似乎成为索引而不是列本身。 demo=data.frame(a=runif(1
我有一个明显简单的问题,我需要比我开发的更快的 R 实现 我为这个例子初始化了随机种子和维度: set.seed(1) d1<-400 d2<-20000 d3<-50 我有一个矩阵 X,尺寸为 d1
在 tidyverse(dplyr) 中有类似的东西: colSums(is.na(空气质量)) ? 换句话说,我怎样才能拥有一个数据框,其中一行总结了每一列中 NA 值的数量? 虽然我即将使用摘要。
我需要对 data.frame 中的一些列求和,规则是,如果缺少一个以上的观察值,则将列求和为 NA NA如果仅缺少 1 个或更少,则无论如何都要对其求和。 假设我有这样的数据, dfn 1, NA
背景 来自 R 编程,我正在使用 扩展为 C/C++ 形式的编译代码。 Rcpp .作为关于循环交换效果的练习(一般来说只是 C/C++),我实现了与 R 等效的 rowSums()和 colSums
我尝试计算数据 x 的每列的总和。但我总是遇到这个错误 "Error in colSums(x, na.rm = T) : invalid 'na.rm' argument" 为什么 na.rm 参数
我是一名优秀的程序员,十分优秀!