【问题标题】:Using function "cat" with "replicate" in R在R中使用函数“cat”和“replicate”
【发布时间】:2015-06-11 22:07:42
【问题描述】:

有没有办法在 R 中将函数“cat”与函数“replicate”结合起来?

我想查看 R 在特定时刻已经完成的“循环”数量。但是,我更喜欢使用“复制”,而不是使用“for”循环。请看下面的简单示例:

 Data <- rnorm(20,20,3)

 # with for loop
 N <- 1000
 outcome <- NULL

 for(i in 1:N){
      Data.boot <- sample(Data, replace=TRUE)
      outcome[i] <- mean(Data.boot)
      cat("\r", i, "of", N)
 }

  #the same but with replicate 
  f <- function() {
  Data.boot <- sample(Data, replace=TRUE)
  outcome <- mean(Data.boot)
  return(outcome)
  }
  replicate(N, f())

因此,任何关于如何使用“replicate”实现函数“cat”的想法(以及查看感兴趣的函数已使用“replicate”执行多少次的其他方法)都将不胜感激。谢谢!

【问题讨论】:

    标签: r for-loop cat replicate


    【解决方案1】:

    作为替代方案,您可以使用 sapply 而不是复制:

    Data <- rnorm(20,20,3)
    N <- 1000
    
    f <- function(i) {
      Data.boot <- sample(Data, replace=TRUE)
      cat("\r", i, "of", N)
      mean(Data.boot)
    }
    outcome <- sapply(1:N, f)
    

    或者,使用 plyr,您可以使用带有进度选项的 raply(如果您的主要目的是查看您的进度):

    outcome <- plyr::raply(N, mean(sample(Data, replace = TRUE)), .progress = "text")
    

    【讨论】:

      【解决方案2】:

      您可以通过以下方式使用范围:

        i = 0
      
        f <- function() {
         Data.boot <- sample(Data, replace=TRUE)
         outcome <- mean(Data.boot)
      
         i <<- i + 1  
         print(i)
         return(outcome)
        }
      

      【讨论】:

        猜你喜欢
        • 2018-01-16
        • 2022-01-10
        • 2021-11-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-20
        • 1970-01-01
        相关资源
        最近更新 更多