在 R 中使用函数 "cat" 和 "replicate"
Using function "cat" with "replicate" in R
有没有办法在 R 中将函数 "cat" 与函数 "replicate" 结合起来?
我想查看 "loops" R 在特定时刻已经完成的数量。但是,我更喜欢使用 "replicate",而不是使用 "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" 的任何想法(以及其他方法来查看使用 [=20= 执行了多少次感兴趣的函数) ]) 将不胜感激。谢谢!
您可以通过以下方式使用范围:
i = 0
f <- function() {
Data.boot <- sample(Data, replace=TRUE)
outcome <- mean(Data.boot)
i <<- i + 1
print(i)
return(outcome)
}
作为替代方案,您可以使用 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")
有没有办法在 R 中将函数 "cat" 与函数 "replicate" 结合起来?
我想查看 "loops" R 在特定时刻已经完成的数量。但是,我更喜欢使用 "replicate",而不是使用 "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" 的任何想法(以及其他方法来查看使用 [=20= 执行了多少次感兴趣的函数) ]) 将不胜感激。谢谢!
您可以通过以下方式使用范围:
i = 0
f <- function() {
Data.boot <- sample(Data, replace=TRUE)
outcome <- mean(Data.boot)
i <<- i + 1
print(i)
return(outcome)
}
作为替代方案,您可以使用 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")