请快速回答一个问题:我正在尝试比较中两列的值R
。如果我手动执行,则效果很好。如果我在下面使用for循环,则无法使用。
对此原因的任何指导将不胜感激。
费尔南多
#Done Manually:
accuracies <- c(
mean (predictions[,1] == mnist_27$test$y),
mean (predictions[,2] == mnist_27$test$y),
mean (predictions[,3] == mnist_27$test$y),
mean (predictions[,4] == mnist_27$test$y),
mean (predictions[,5] == mnist_27$test$y),
mean (predictions[,6] == mnist_27$test$y),
mean (predictions[,7] == mnist_27$test$y),
mean (predictions[,8] == mnist_27$test$y),
mean (predictions[,9] == mnist_27$test$y),
mean (predictions[,10] == mnist_27$test$y))
#Done with the for loop:
accuracies <- for (i in 1:10) {
mean (predictions[,i] == mnist_27$test$y)
}
如果要使用for
循环。初始化一个NULL对象,然后在每次迭代时连接该对象,同时更新它
v1 <- c()
for (i in 1:ncol(predictions)) {
v1 <- c(v1, mean (predictions[,i] == mnist_27$test$y))
}
或另一种选择是与初始化向量length
作为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, mean (predictions[,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
似乎最慢
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句