Функция секундомера в R

Попробуйте следующее:

set style fill  transparent solid 0.35 noborder
set style circle radius 0.02
plot 'test' u 1:2 with circles lc rgb "blue", \
     '' u 1:2 every 100 w circles lc rgb "red" fs solid 1.0 border lt -1

, который выводит

Как вы можете видеть, вы можете указать для каждого набора данных, использовать ли прозрачность и какие цвет в использовании. Если ваши данные состоят из двух значений (x и y позиции круга), вы должны указать радиус круга через set style circle .... Если ваши данные имеют три строки, вы можете использовать третье значение, чтобы указать радиус круга для каждой точки данных. Вы можете играть с уровнем прозрачности, который колеблется от 0 (полная прозрачность) до 1 (без прозрачности).

24
задан Amro 11 November 2009 в 18:09
поделиться

5 ответов

В R много инструментов для профилирования, как упоминал Дирк. Если вам нужна простота tic / toc, то вы можете сделать это и в R.

РЕДАКТИРОВАТЬ: я каннибализировал функциональность сбора мусора из пакета MATLAB, и теперь tic позволяет вам выбрать, хотите ли вы узнать общее прошедшее время или только время пользователя.

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(); invisible(qr(matrix(runif(1e6), nrow=1e3))); toc()

37
ответ дан Richie Cotton 16 October 2019 в 07:46
поделиться

Прямых эквивалентов tic и toc не существует.

См. help(system.time), а также руководство по расширению R для профилирования. Обсуждение инструментов профилирования и профилирования также содержится на слайдах «Введение в HPC с R», на которые ссылается [Task] High Performance Computing with R

8
ответ дан Dirk Eddelbuettel 16 October 2019 в 07:46
поделиться

Существует относительно новый пакет tictoc, который воспроизводит функции именно так, как вы бы использовали их в Matlab.

http://cran.r-project.org/web/packages/tictoc/index.html

## Basic use case
tic()
print("Do something...")
Sys.sleep(1)
toc()
# 1.034 sec elapsed
4
ответ дан Will 16 October 2019 в 07:46
поделиться

Просто для полноты: на самом деле вы можете «имитировать» тик и ток в R, так что вы можете написать

tic
## do something
toc

без скобок. Хитрость заключается в том, чтобы использовать функцию print, как показано в Fun: tic и toc в R :

tic <- 1
class(tic) <- "tic"

toc <- 1
class(toc) <- "toc"

print.tic <- function(x, ...) {
    if (!exists("proc.time"))
        stop("cannot measure time")
    gc(FALSE)
    assign(".temp.tictime", proc.time(), envir = .GlobalEnv)
}

print.toc <- function(x,...) {
    if (!exists(".temp.tictime", envir = .GlobalEnv))
        stop("did you tic?")
    time <- get(".temp.tictime", envir = .GlobalEnv)
    rm(".temp.tictime", envir = .GlobalEnv)
    print(res <- structure(proc.time() - time,
                           class = "proc_time"), ...)
    invisible(res)
}

, поэтому ввод

tic
Sys.sleep(2)
toc

должен привести к результатам. примерно так:

   user  system elapsed 
  0.000   0.000   2.002 

Как я уже сказал, это уловка; system.time, Rprof и такие пакеты, как rbenchmark являются способом измерения времени вычисления в R.

0
ответ дан Enrico Schumann 16 October 2019 в 07:46
поделиться

There is a MATLAB emulation package matlab on CRAN. It has implementations of tic and toc (but they look very similar to the functions in Richie Cottons answer; "elapsed" is used instead of "user.self" in proc.time())

> tic
function (gcFirst = FALSE) 
{
    if (gcFirst == TRUE) {
        gc(verbose = FALSE)
    }
    assign("savedTime", proc.time()[3], envir = .MatlabNamespaceEnv)
    invisible()
}
<environment: namespace:matlab>
> toc
function (echo = TRUE) 
{
    prevTime <- get("savedTime", envir = .MatlabNamespaceEnv)
    diffTimeSecs <- proc.time()[3] - prevTime
    if (echo) {
        cat(sprintf("elapsed time is %f seconds", diffTimeSecs), 
            "\n")
        return(invisible())
    }
    else {
        return(diffTimeSecs)
    }
}
<environment: namespace:matlab>
14
ответ дан 28 November 2019 в 22:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: