Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用knitr时如何配置代码?_R_Profiling_Knitr_Evaluate - Fatal编程技术网

使用knitr时如何配置代码?

使用knitr时如何配置代码?,r,profiling,knitr,evaluate,R,Profiling,Knitr,Evaluate,我试图建立一个工作流程,使用knitr和 render\u markdown(strict=T)设置我的答案和/或问题的格式 最近,我尝试使用profr对一些代码运行评测,由于knitr的实现,评测将拾取支持knitr的evaluate等的所有调用 比如说 不穿针织衫 如果我运行在纯R library(profr) quantile_ex <- profr({Sys.sleep(1); example(quantile, setRNG = TRUE)}, 0.01) quantile_ex

我试图建立一个工作流程,使用
knitr
render\u markdown(strict=T)
设置我的答案和/或问题的格式

最近,我尝试使用
profr
对一些代码运行评测,由于
knitr
的实现,评测将拾取支持
knitr
evaluate
等的所有调用

比如说

不穿针织衫 如果我运行在纯
R

library(profr)
quantile_ex <- profr({Sys.sleep(1); example(quantile, setRNG = TRUE)}, 0.01)
quantile_ex
##                      f level time start  end  leaf source
## 9       Sys.sleep     1 0.64  0.01 0.65  TRUE   base
## 10        example     1 0.05  0.65 0.70 FALSE  utils
## 11   index.search     2 0.01  0.65 0.66 FALSE   <NA>
## 12    <Anonymous>     2 0.02  0.66 0.68 FALSE   <NA>
## 13         source     2 0.01  0.68 0.69 FALSE   base
## 14         unlink     2 0.01  0.69 0.70  TRUE   base
## 15    file.exists     3 0.01  0.65 0.66  TRUE   base
## 16     prepare_Rd     3 0.01  0.66 0.67 FALSE   <NA>
## 17            of0     3 0.01  0.67 0.68 FALSE   <NA>
## 18           file     3 0.01  0.68 0.69  TRUE   base
## 19   .getHelpFile     4 0.01  0.66 0.67 FALSE   <NA>
## 20            of1     4 0.01  0.67 0.68 FALSE   <NA>
## 21    <Anonymous>     5 0.01  0.66 0.67 FALSE   <NA>
## 22     WriteLines     5 0.01  0.67 0.68 FALSE   <NA>
## 23 lazyLoadDBexec     6 0.01  0.66 0.67 FALSE   base
## 24     writeLines     6 0.01  0.67 0.68 FALSE   base
## 25            fun     7 0.01  0.66 0.67 FALSE   <NA>
## 26         paste0     7 0.01  0.67 0.68 FALSE   base
## 27       basename     8 0.01  0.66 0.67  TRUE   base
## 28             wr     8 0.01  0.67 0.68 FALSE   <NA>
## 29         paste0     9 0.01  0.67 0.68 FALSE   base
## 30        strwrap    10 0.01  0.67 0.68 FALSE   base
## 31         lapply    11 0.01  0.67 0.68 FALSE   base
## 32       strsplit    12 0.01  0.67 0.68  TRUE   base
它似乎没有实际分析运行的代码,只有
knitr
/
evaluate
详细信息

问题和可能的解决办法 我目前的工作流程是在knitr之外运行评测,但我发现自动格式化(用
##
注释输出)非常有用

是否有人找到了一个简洁的解决方案,或者是软件包开发人员需要解决的问题

我目前的想法是重写
parserprof
,将其自身限制在对
force
的第一次调用之上(而不是默认级别7)

重写profr的示例 下面是对
profr
的重写,几乎可以正常工作

库(profr)

profr类似于块的
profrk设置怎么样

library(profr)

profrk <- function(expr, delay = 1, interval = 0.02, quiet) {
    profrk_marker <- function(expr) {
        eval(expr)
    }

    filter <- function(prof.out) {
        level.filter <- prof.out$level[which(prof.out == "profrk_marker")] + 
            2

        prof.out <- prof.out[prof.out$level > level.filter, ]
        time.offset <- min(prof.out$start)

        prof.out$start <- prof.out$start - time.offset
        prof.out$end <- prof.out$end - time.offset

        prof.out
    }

    filter(profr({
        Sys.sleep(delay)
        profrk_marker(substitute(expr))
    }, interval = interval, quiet = quiet))
}
pr <- profrk(example(quantile, setRNG = TRUE), delay = 1, interval = 0.01, quiet = TRUE)
print(pr)

##                   f level time start  end  leaf source
## 39          example    31 0.08  0.00 0.08 FALSE  utils
## 40     index.search    32 0.01  0.00 0.01 FALSE   <NA>
## 41      <Anonymous>    32 0.05  0.01 0.06 FALSE   <NA>
## 42           source    32 0.02  0.06 0.08 FALSE   base
## 43          readRDS    33 0.01  0.00 0.01 FALSE   base
## 44       prepare_Rd    33 0.02  0.01 0.03 FALSE   <NA>
## 45           RdTags    33 0.01  0.03 0.04 FALSE   <NA>
## 46              of0    33 0.01  0.04 0.05 FALSE   <NA>
## 47           render    33 0.01  0.05 0.06 FALSE   <NA>
## 48      srcfilecopy    33 0.01  0.06 0.07 FALSE   base
## 49      withVisible    33 0.01  0.07 0.08 FALSE   base
## 50           gzfile    34 0.01  0.00 0.01  TRUE   base
## 51     .getHelpFile    34 0.02  0.01 0.03 FALSE   <NA>
## 52           sapply    34 0.01  0.03 0.04 FALSE   base
## 53              of1    34 0.01  0.04 0.05 FALSE   <NA>
## 54              of0    34 0.01  0.05 0.06 FALSE   <NA>
## 55        file.info    34 0.01  0.06 0.07 FALSE   base
## 56             eval    34 0.01  0.07 0.08 FALSE   base
## 57      <Anonymous>    35 0.02  0.01 0.03 FALSE   <NA>
## 58   simplify2array    35 0.01  0.03 0.04 FALSE   base
## 59       WriteLines    35 0.01  0.04 0.05 FALSE   <NA>
## 60              of1    35 0.01  0.05 0.06 FALSE   <NA>
## 61         .POSIXct    35 0.01  0.06 0.07 FALSE   base
## 62             eval    35 0.01  0.07 0.08 FALSE   base
## 63   lazyLoadDBexec    36 0.02  0.01 0.03 FALSE   base
## 64           unique    36 0.01  0.03 0.04  TRUE   base
## 65       writeLines    36 0.01  0.04 0.05 FALSE   base
## 66       WriteLines    36 0.01  0.05 0.06 FALSE   <NA>
## 67        structure    36 0.01  0.06 0.07  TRUE   base
## 68         quantile    36 0.01  0.07 0.08 FALSE  stats
## 69          readRDS    37 0.01  0.01 0.02  TRUE   base
## 70              fun    37 0.01  0.02 0.03 FALSE   <NA>
## 71           paste0    37 0.01  0.04 0.05 FALSE   base
## 72       writeLines    37 0.01  0.05 0.06 FALSE   base
## 73 quantile.default    37 0.01  0.07 0.08 FALSE  stats
## 74            fetch    38 0.01  0.02 0.03 FALSE   <NA>
## 75               wr    38 0.01  0.04 0.05 FALSE   <NA>
## 76           paste0    38 0.01  0.05 0.06 FALSE   base
## 77            paste    38 0.01  0.07 0.08 FALSE   base
## 78      <Anonymous>    39 0.01  0.02 0.03 FALSE   <NA>
## 79           paste0    39 0.01  0.04 0.05 FALSE   base
## 80            remap    39 0.01  0.05 0.06 FALSE   <NA>
## 81          formatC    39 0.01  0.07 0.08 FALSE   base
## 82     getFromFrame    40 0.01  0.02 0.03  TRUE   <NA>
## 83          strwrap    40 0.01  0.04 0.05 FALSE   base
## 84             psub    40 0.01  0.05 0.06  TRUE   <NA>
## 85      blank.chars    40 0.01  0.07 0.08 FALSE   <NA>
## 86           lapply    41 0.01  0.04 0.05 FALSE   base
## 87           vapply    41 0.01  0.07 0.08 FALSE   base
## 88         strsplit    42 0.01  0.04 0.05  TRUE   base
## 89              FUN    42 0.01  0.07 0.08 FALSE   <NA>
## 90            paste    43 0.01  0.07 0.08  TRUE   base

(尝试将不同延迟和间隔下的形状与控制台捕获进行比较。)


.

您可以使用区块选项
engine=“Rscript”
,在单独的R会话中提供评估代码

# R profiling with knitr

```{r engine="Rscript"}
library(profr)
quantile_ex <- profr({Sys.sleep(1); example(quantile, setRNG = TRUE)}, 0.01)
quantile_ex
```
#使用knitr进行分析
```{r engine=“Rscript”}
图书馆(profr)

分位数?我发现
rprof
采样器实际上做了几乎正确的事情。它收集调用堆栈样本。(几乎是这样,因为它不报告拨打电话的线路号码。)诀窍是采集少量样本并实际查看它们(或者采集大量样本,但只查看随机选择的少量样本)。最难的是把那些无关紧要的事情都忘掉。描述每个样本中发生的情况。如果您能避免在多个示例中看到它所做的任何事情,都将节省大量时间。谢谢。知道如何在engine=“Rscript”的块中使用rprofm时去掉“##[1]新页面:“getExportedValue”:”?
library(profr)
profr <- function(expr, interval = 0.02, quiet = TRUE) {
    tmp <- tempfile()
    on.exit(unlink(tmp))
    on.exit(unlink("Rprof.out"), add = T)
    if (quiet) {
        tc <- textConnection(NULL, "w")
        sink(tc)
        on.exit(sink(), add = TRUE)
        on.exit(close(tc), add = TRUE)
    }
    Rprof(tmp, append = TRUE, interval = interval)
    try(force(expr))
    Rprof(NULL)
    parsed <- parse_rprof(tmp, interval)
    which_force <- min(which(parsed$f == "force"))

    parsed <- parsed[parsed$level > parsed$level[which_force], ]
    parsed$level <- parsed$level - parsed$level[which_force]
    parsed
}

quantile_ex <- profr({
    Sys.sleep(1)
    example(quantile, setRNG = TRUE)
}, 0.01)
quantile_ex


##                 f level time start  end  leaf source
## 32      Sys.sleep    NA 0.90  0.00 0.90  TRUE   base
## 33        example    NA 0.03  0.90 0.93 FALSE  utils
## 34    <Anonymous>    NA 0.03  0.90 0.93 FALSE   <NA>
## 35     prepare_Rd    NA 0.01  0.90 0.91 FALSE   <NA>
## 36         render    NA 0.02  0.91 0.93 FALSE   <NA>
## 37   .getHelpFile    NA 0.01  0.90 0.91 FALSE   <NA>
## 38           %in%    NA 0.01  0.91 0.92  TRUE   base
## 39            of0    NA 0.01  0.92 0.93 FALSE   <NA>
## 40    <Anonymous>    NA 0.01  0.90 0.91 FALSE   <NA>
## 41            of1    NA 0.01  0.92 0.93 FALSE   <NA>
## 42 lazyLoadDBexec    NA 0.01  0.90 0.91 FALSE   base
## 43     WriteLines    NA 0.01  0.92 0.93 FALSE   <NA>
## 44            fun    NA 0.01  0.90 0.91 FALSE   <NA>
## 45     writeLines    NA 0.01  0.92 0.93 FALSE   base
## 46          fetch    NA 0.01  0.90 0.91  TRUE   <NA>
## 47         paste0    NA 0.01  0.92 0.93 FALSE   base
## 48          remap    NA 0.01  0.92 0.93 FALSE   <NA>
## 49           psub    NA 0.01  0.92 0.93  TRUE   <NA>
library(profr)

profrk <- function(expr, delay = 1, interval = 0.02, quiet) {
    profrk_marker <- function(expr) {
        eval(expr)
    }

    filter <- function(prof.out) {
        level.filter <- prof.out$level[which(prof.out == "profrk_marker")] + 
            2

        prof.out <- prof.out[prof.out$level > level.filter, ]
        time.offset <- min(prof.out$start)

        prof.out$start <- prof.out$start - time.offset
        prof.out$end <- prof.out$end - time.offset

        prof.out
    }

    filter(profr({
        Sys.sleep(delay)
        profrk_marker(substitute(expr))
    }, interval = interval, quiet = quiet))
}
pr <- profrk(example(quantile, setRNG = TRUE), delay = 1, interval = 0.01, quiet = TRUE)
print(pr)

##                   f level time start  end  leaf source
## 39          example    31 0.08  0.00 0.08 FALSE  utils
## 40     index.search    32 0.01  0.00 0.01 FALSE   <NA>
## 41      <Anonymous>    32 0.05  0.01 0.06 FALSE   <NA>
## 42           source    32 0.02  0.06 0.08 FALSE   base
## 43          readRDS    33 0.01  0.00 0.01 FALSE   base
## 44       prepare_Rd    33 0.02  0.01 0.03 FALSE   <NA>
## 45           RdTags    33 0.01  0.03 0.04 FALSE   <NA>
## 46              of0    33 0.01  0.04 0.05 FALSE   <NA>
## 47           render    33 0.01  0.05 0.06 FALSE   <NA>
## 48      srcfilecopy    33 0.01  0.06 0.07 FALSE   base
## 49      withVisible    33 0.01  0.07 0.08 FALSE   base
## 50           gzfile    34 0.01  0.00 0.01  TRUE   base
## 51     .getHelpFile    34 0.02  0.01 0.03 FALSE   <NA>
## 52           sapply    34 0.01  0.03 0.04 FALSE   base
## 53              of1    34 0.01  0.04 0.05 FALSE   <NA>
## 54              of0    34 0.01  0.05 0.06 FALSE   <NA>
## 55        file.info    34 0.01  0.06 0.07 FALSE   base
## 56             eval    34 0.01  0.07 0.08 FALSE   base
## 57      <Anonymous>    35 0.02  0.01 0.03 FALSE   <NA>
## 58   simplify2array    35 0.01  0.03 0.04 FALSE   base
## 59       WriteLines    35 0.01  0.04 0.05 FALSE   <NA>
## 60              of1    35 0.01  0.05 0.06 FALSE   <NA>
## 61         .POSIXct    35 0.01  0.06 0.07 FALSE   base
## 62             eval    35 0.01  0.07 0.08 FALSE   base
## 63   lazyLoadDBexec    36 0.02  0.01 0.03 FALSE   base
## 64           unique    36 0.01  0.03 0.04  TRUE   base
## 65       writeLines    36 0.01  0.04 0.05 FALSE   base
## 66       WriteLines    36 0.01  0.05 0.06 FALSE   <NA>
## 67        structure    36 0.01  0.06 0.07  TRUE   base
## 68         quantile    36 0.01  0.07 0.08 FALSE  stats
## 69          readRDS    37 0.01  0.01 0.02  TRUE   base
## 70              fun    37 0.01  0.02 0.03 FALSE   <NA>
## 71           paste0    37 0.01  0.04 0.05 FALSE   base
## 72       writeLines    37 0.01  0.05 0.06 FALSE   base
## 73 quantile.default    37 0.01  0.07 0.08 FALSE  stats
## 74            fetch    38 0.01  0.02 0.03 FALSE   <NA>
## 75               wr    38 0.01  0.04 0.05 FALSE   <NA>
## 76           paste0    38 0.01  0.05 0.06 FALSE   base
## 77            paste    38 0.01  0.07 0.08 FALSE   base
## 78      <Anonymous>    39 0.01  0.02 0.03 FALSE   <NA>
## 79           paste0    39 0.01  0.04 0.05 FALSE   base
## 80            remap    39 0.01  0.05 0.06 FALSE   <NA>
## 81          formatC    39 0.01  0.07 0.08 FALSE   base
## 82     getFromFrame    40 0.01  0.02 0.03  TRUE   <NA>
## 83          strwrap    40 0.01  0.04 0.05 FALSE   base
## 84             psub    40 0.01  0.05 0.06  TRUE   <NA>
## 85      blank.chars    40 0.01  0.07 0.08 FALSE   <NA>
## 86           lapply    41 0.01  0.04 0.05 FALSE   base
## 87           vapply    41 0.01  0.07 0.08 FALSE   base
## 88         strsplit    42 0.01  0.04 0.05  TRUE   base
## 89              FUN    42 0.01  0.07 0.08 FALSE   <NA>
## 90            paste    43 0.01  0.07 0.08  TRUE   base
plot(pr)
# R profiling with knitr

```{r engine="Rscript"}
library(profr)
quantile_ex <- profr({Sys.sleep(1); example(quantile, setRNG = TRUE)}, 0.01)
quantile_ex
```
##                   f level time start  end  leaf source
## 8           example     1 0.02  0.00 0.02 FALSE  utils
## 9       <Anonymous>     2 0.01  0.00 0.01 FALSE   <NA>
## 10           source     2 0.01  0.01 0.02 FALSE   base
## 11 .Rd_format_title     3 0.01  0.00 0.01 FALSE   <NA>
## 12      withVisible     3 0.01  0.01 0.02 FALSE   base
## 13             gsub     4 0.01  0.00 0.01 FALSE   base
## 14             eval     4 0.01  0.01 0.02 FALSE   base
## 15    .Rd_get_title     5 0.01  0.00 0.01 FALSE   <NA>
## 16             eval     5 0.01  0.01 0.02 FALSE   base
## 17  .Rd_get_section     6 0.01  0.00 0.01 FALSE   <NA>
## 18         quantile     6 0.01  0.01 0.02 FALSE  stats
## 19           RdTags     7 0.01  0.00 0.01 FALSE   <NA>
## 20 quantile.default     7 0.01  0.01 0.02 FALSE  stats
## 21           sapply     8 0.01  0.00 0.01 FALSE   base
## 22             sort     8 0.01  0.01 0.02 FALSE   base
## 23           lapply     9 0.01  0.00 0.01 FALSE   base
## 24     sort.default     9 0.01  0.01 0.02 FALSE   base
## 25               [[    10 0.01  0.00 0.01  TRUE   base
## 26         sort.int    10 0.01  0.01 0.02 FALSE   base
## 27           unique    11 0.01  0.01 0.02  TRUE   base