从R中的example()中获取函数

时间:2012-08-29 03:49:48

标签: r r-markdown knitr

使用pairs()时,我喜欢使用建议的函数panel.corpanel.hist(示例中建议)来消除重复的上三角空间或下三角空间并提供额外信息。

我想使用像

这样的函数来源代码
source(example(pairs, ask = F, echo = F))

并且没有得到任何输出(包括:Error in readLines(file, warn = FALSE) : 'con' is not a connection),没有打印示例图。这可能吗?

正如我所注意的那样,我希望不打印图表的原因是我想在 R Markdown文件中使用它,而不必查看example(pairs)我的文件中的情节。

1 个答案:

答案 0 :(得分:2)

您可以运行未包含的块,但不保留数字。这些函数将在代码运行时可用,但输出不包含在文档中。

```{r example_pairs, include = F, fig.keep = 'none'}
example(pairs)
```

```{r test}
exists('panel.cor')
```

输出看起来像

exists("panel.cor")
## [1] TRUE

panel.cor存在于全球环境中 - 您可以使用它。

编辑替代

您也可以使用give.lines参数并自行保存源代码

.ex <- example(pairs, give.lines = T)
# find the code in question (look for assignment / scope delimiters)
which(grepl(.ex, pattern = "(panel.hist <-)|(panel.cor <-)|[{}]"))
##[1] 18 19 26 33 34 42

cat(.ex[c(18:26, 33:42)], sep = "\n")
panel.hist <- function(x, ...)
{
    usr <- par("usr"); on.exit(par(usr))
    par(usr = c(usr[1:2], 0, 1.5) )
    h <- hist(x, plot = FALSE)
    breaks <- h$breaks; nB <- length(breaks)
    y <- h$counts; y <- y/max(y)
    rect(breaks[-nB], 0, breaks[-1], y, col="cyan", ...)
}
panel.cor <- function(x, y, digits=2, prefix="", cex.cor, ...)
{
    usr <- par("usr"); on.exit(par(usr))
    par(usr = c(0, 1, 0, 1))
    r <- abs(cor(x, y))
    txt <- format(c(r, 0.123456789), digits=digits)[1]
    txt <- paste(prefix, txt, sep="")
    if(missing(cex.cor)) cex.cor <- 0.8/strwidth(txt)
    text(0.5, 0.5, txt, cex = cex.cor * r)
}