lm
函数的参数可以通过使用:
args(lm)
输出
function (formula, data, subset, weights, na.action, method = "qr",
model = TRUE, x = FALSE, y = FALSE, qr = TRUE, singular.ok = TRUE,
contrasts = NULL, offset, ...)
NULL
问题
如何获得:
lm (formula, data, subset, weights, na.action, method = "qr",
model = TRUE, x = FALSE, y = FALSE, qr = TRUE, singular.ok = TRUE,
contrasts = NULL, offset, ...)
包含要在Sweave
或knitr
中使用的每个参数的说明(不完整的帮助)。感谢
被修改
使用@Ananda提供的funExtract功能,我非常接近我想要的结果。以下是带有输出的Rnw
文件的代码。
\documentclass{article}
\usepackage[T1]{fontenc}
\begin{document}
Arguments for lm
<< label = funExtract, echo = TRUE, results = "hide", tidy = FALSE >>=
funExtract <- function(Function, section = "Usage") {
A <- deparse(substitute(Function))
x <- capture.output(tools:::Rd2txt(utils:::.getHelpFile(help(A))))
B <- grep("^_", x) ## section start lines
x <- gsub("_\b", "", x, fixed = TRUE) ## remove "_\b"
X <- rep(FALSE, length(x))
X[B] <- 1
out <- split(x, cumsum(X))
out <- out[[which(sapply(out, function(x)
grepl(section, x[1], fixed = TRUE)))]]
cat(out, sep = "\n")
invisible(out)
}
@
\vspace{0.5cm}\\
funExtract function output
\vspace{0.25cm}\\
<< label = lm-usage, echo = FALSE, results = "asis" >>=
funExtract(lm, section="Usage:")
@
\vspace{0.5cm}\\
args function output
\vspace{0.25cm}\\
<< label = lm-args, echo = FALSE, results = "asis" >>=
args(lm)
@
\end{document}
输出
funExtract函数输出问题
答案 0 :(得分:5)
我在 formatR 包中有一个函数usage()
,用于捕获函数的参数。目前,您必须使用development version(&gt; = 0.10.3)。
对于 knitr ,我也有最近的更改(也请测试其开发版本on Github),以便您可以更轻松地使用显示功能:您可以使用新的块选项code
将代码输入到块中。
将两个部分组合在一起,您就可以编写如下代码块:
<<test, code=formatR::usage(lm), eval=FALSE>>=
@
最近出现这些功能的原因是我自己也需要它们。我想用语法高亮显示函数的用法。此解决方案可移植到 knitr 支持的所有文档格式,不限于Rnw。
答案 1 :(得分:4)
我已经编写了一个函数,并在之前将其作为答案发布(如问题本身所述),但对于不一致或要求必须与“markdown”一起使用才能成功使用并不完全满意。经过一些工作后,这就是我提出的功能:
helpExtract <- function(Function, section = "Usage", type = "m_code", ...) {
A <- deparse(substitute(Function))
x <- capture.output(tools:::Rd2txt(utils:::.getHelpFile(help(A, ...)),
options = list(sectionIndent = 0)))
B <- grep("^_", x) ## section start lines
x <- gsub("_\b", "", x, fixed = TRUE) ## remove "_\b"
X <- rep(FALSE, length(x))
X[B] <- 1
out <- split(x, cumsum(X))
out <- out[[which(sapply(out, function(x)
grepl(section, x[1], fixed = TRUE)))]][-c(1, 2)]
while(TRUE) {
out <- out[-length(out)]
if (out[length(out)] != "") { break }
}
switch(
type,
m_code = c("```r", out, "```"),
s_code = c("<<>>=", out, "@"),
m_text = paste(" ", out, collapse = "\n"),
s_text = c("\\begin{verbatim}", out, "\\end{verbatim}"),
stop("`type` must be either `m_code`, `s_code`, `m_text`, or `s_text`")
)
}
非常满口,并不是完全干......但我想捕捉四种情景,这是我想到的最快的想法。我预期的四种情景是:
type = "m_code"
)type = "m_text"
)type = "s_code"
)type = "s_text"
)该函数提取Rd2txt
的输出。我选择了其他格式(HTML,LaTeX),允许我使用单个函数来获取我想要的东西而不必创建多个函数。
根据您是创建“Sweave”(.Rnw)还是“markdown”(.Rmd)文档,使用情况会有所不同。
<强>降价强>
将代码插入到看起来像这样的代码块中(也许有一天我会添加不同的方法,但现在不添加):
```{r, echo=FALSE, results='asis'}
cat(helpExtract(cor), sep = "\n")
```
<强> Sweave 强>
假设您正在使用Sexpr{knit_child(.)}
\Sexpr{knit_child(textConnection(helpExtract(cor, type = "s_code")),
options = list(tidy = FALSE, eval = FALSE))}
我created a Gist包括函数,示例Rmd文件和示例Rnw文件。随意在Stack Overflow 上留下评论和建议(因为Gist评论几乎毫无意义,因为他们在发布评论时不会通知用户)。
如果您尝试从当前未加载的包中引用某个函数,helpExtract
的用法应该类似于:
helpExtract(gls, package = "nlme")
答案 2 :(得分:2)
您可以使用Rd_db
从包中获取Rd数据。
x <- Rd_db("stats")
从中提取lm帮助:
lmhelp <- x[basename(names(x))=="lm.Rd"]
然后使用capture.output
和Rd2latex
来获取帮助页面的内容:
lmhelptex <- capture.output(Rd2latex(lmhelp[[1]]))
然后拉出要包含在rnw文件中的段:
lmhelptex[do.call(":",as.list(grep("Usage",lmhelptex)))]
[1] "\\begin{Usage}"
[2] "\\begin{verbatim}"
[3] "lm(formula, data, subset, weights, na.action,"
[4] " method = \"qr\", model = TRUE, x = FALSE, y = FALSE, qr = TRUE,"
[5] " singular.ok = TRUE, contrasts = NULL, offset, ...)"
[6] "\\end{verbatim}"
[7] "\\end{Usage}"
lmhelptex[do.call(":",as.list(grep("Arguments",lmhelptex)))]
[1] "\\begin{Arguments}"
[2] "\\begin{ldescription}"
[3] "\\item[\\code{formula}] an object of class \\code{\"\\LinkA{formula}{formula}\"} (or one that"
[4] "can be coerced to that class): a symbolic description of the"
[5] "model to be fitted. The details of model specification are given"
[6] "under `Details'."
[7] ""
[8] "\\item[\\code{data}] ...snip...