R中for循环内的子集

费尔南多

请快速回答一个问题:我正在尝试比较中两列的值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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章