我对R中的switch语句有点困惑.只需在googling函数中我得到一个例子,如下所示:
switch的一个常见用途是根据函数的一个参数的字符值进行分支.
> centre <- function(x, type) {
+ switch(type,
+ mean = mean(x),
+ median = median(x),
+ trimmed = mean(x, trim = .1))
+ }
> x <- rcauchy(10)
> centre(x, "mean")
[1] 0.8760325
> centre(x, "median")
[1] 0.5360891
> centre(x, "trimmed")
[1] 0.6086504
Run Code Online (Sandbox Code Playgroud)
然而,这似乎只是if为每个指定了一堆语句type
这就是全部switch()吗?有人可以给我更多的例子和更好的应用吗?
我已经阅读了这个解决方案 tic(), toc() functions
tic <- function(gcFirst = TRUE, type=c("elapsed", "user.self", "sys.self"))
{
type <- match.arg(type)
assign(".type", type, envir=baseenv())
if(gcFirst) gc(FALSE)
tic <- proc.time()[type]
assign(".tic", tic, envir=baseenv())
invisible(tic)
}
toc <- function()
{
type <- get(".type", envir=baseenv())
toc <- proc.time()[type]
tic <- get(".tic", envir=baseenv())
print(toc - tic)
invisible(toc)
}
tic();
-----code----
toc();
elapsed
0.15
Run Code Online (Sandbox Code Playgroud)
但我想在几毫秒内获得很多精度?
我也在用这个
ptm <- proc.time()
---code
proc.time() - ptm
Run Code Online (Sandbox Code Playgroud)
得到这个
user system elapsed
1.55 0.25 1.84
Run Code Online (Sandbox Code Playgroud)
如何获得更多小数或更精确?
我可以使用以下代码运行一段代码5或10秒:
period <- 10 ## minimum time (in seconds) that the loop should run for
tm <- Sys.time() ## starting data & time
while(Sys.time() - tm < period) print(Sys.time())
Run Code Online (Sandbox Code Playgroud)
代码运行良好5或10秒.但是当我将周期值替换为60以使其运行一分钟时,代码永远不会停止.怎么了?
我正在阅读这本书:《R 编程实践》。以下代码是直接从书中粘贴的,但不会在 RStudio 中运行,我试图理解为什么。
system.time(
output <- rep(NA, 1000000) for (i in 1:1000000) {
output[i] <- i + 1
}
)
Run Code Online (Sandbox Code Playgroud)
我明白了:
> system.time(
+ output <- rep(NA, 1000000) for (i in 1:1000000) {
Error: unexpected 'for' in:
"system.time(
output <- rep(NA, 1000000) for"
> output[i] <- i + 1
Error: object 'i' not found
> }
Error: unexpected '}' in " }"
> )
Error: unexpected ')' in ")"
Run Code Online (Sandbox Code Playgroud) 对于简单的自制基准测试,我想在我的R脚本中添加一个计时器,以便我知道它运行了多长时间.这是一个在大量数据上释放的脚本,因此可能需要一个多小时才能完成.因此,我正在寻找一种方法,告诉我脚本运行的确切时间.
我得到的想法是:
old = getCurrentTime()
# Do the rest of my script
(new = getCurrentTime() - old)
Run Code Online (Sandbox Code Playgroud)
我不知道这是否有意义,但似乎最好的方法是在没有计数器在后台运行的情况下,通过比较脚本的开始时间和时间与结束并打印差异.但是,我不确定如何在R中获取时间,获得差异并将其格式化hh:mm:ss.