如何解决R中for循环内的子集
请快速回答一个问题:我正在尝试比较su -c "mount -o rw,remount /system"
中两列的值。如果我手动执行,则效果很好。如果我在下面使用for循环,它将无法正常工作。
对于为什么会发生这种情况的任何指导将不胜感激。
费尔南多
R
解决方法
如果我们要使用for
循环。初始化一个NULL对象,然后在每次迭代时连接该对象,同时更新它
v1 <- c()
for (i in 1:ncol(predictions)) {
v1 <- c(v1,mean (predictions[,i] == mnist_27$test$y))
}
或者另一种选择是使用length
作为'predictions'的ncol
初始化向量,然后使用索引将mean
的值分配给'v1'的每个元素
v1 <- numeric(ncol(predictions))
for(i in 1:ncol(predictions)) {
v1[i] <- mean (predictions[,i] == mnist_27$test$y)
}
在R
中,这可以更轻松地完成
colMeans(predictions == mnist_27$test$y)
基准
predictions <- as.data.frame(rep(rnorm(10000),10))
y<- c(predictions[1:1000,])
dyn.vect <- function(){
v1 <- c()
for (i in 1:ncol(predictions)) v1 <- c(v1,i] == y))
v1
}
vector.initialised <- function(){
v1 <- numeric(ncol(predictions))
for(i in 1:ncol(predictions)) v1[i] <- mean (predictions[,i] == y)
v1
}
( bench<-microbenchmark::microbenchmark(
"Dynamic vector"=dyn.vect(),"Intialised vector"=vector.initialised(),colMeans=colMeans(predictions == y),lapply=lapply(predictions,function(x) {mean(x==y)})#,#times=1000
) )
#> Unit: microseconds
#> expr min lq mean median uq max neval
#> Dynamic vector 270.199 481.5680 627.9717 504.5865 557.5565 8212.167 100
#> Intialised vector 273.730 480.0315 700.2607 511.1460 570.0820 6879.310 100
#> colMeans 4450.484 7392.6910 8642.0002 7635.3505 8634.2050 50261.697 100
#> lapply 272.007 466.1775 565.0209 486.5720 550.4960 4921.402 100
ggplot2::autoplot(bench)
lapply
似乎是最快的,而colMeans
似乎是最快的
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。