我已经花了几个小时阅读R-exts手册和
parse_Rd()(以及参考文献中的PDF文档),但我
仍然没有弄清楚results=rd的含义或用法。我以为我可以
使用R代码片段动态创建Rd片段。这是
一个例子,我期望输出是一个描述列表
HTML中的<DL>,但事实并非如此。

des <- "\\describe{\\item{def}{ghi}}"
con <- textConnection(c("\\title{abc}\\name{abc}",
                       "\\details{\\Sexpr[results=rd,stage=build]{des}}"))
z <- parse_Rd(con)
Rd2HTML(z, stages = "build")
close(con)


R 2.13.2下的输出:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><title>R: abc</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link rel="stylesheet" type="text/css" href="R.css">
</head><body>
<table width="100%" summary="page for abc"><tr><td>abc</td><td
align="right">R Documentation</td></tr></table>
<h2>abc</h2>
<h3>Details</h3>
<p>defghi</p>
</body></html>


我实际上是用Rd的\Sexpr{}构建一个程序包
而不是真正使用Rd2HTML();内容未在之后呈现
我运行R CMD构建。

是否有人尝试使用\Sexpr{}动态生成Rd片段?谢谢!



答案摘要


少数人确认这在R 2.13.1下有效,但在更高版本(2.13.2或更高版本)下无效

最佳答案

您的示例对我有用:

> sessionInfo()
R version 2.13.1 Patched (2011-07-08 r56332)
Platform: x86_64-unknown-linux-gnu (64-bit)

locale:
 [1] LC_CTYPE=en_GB.UTF-8       LC_NUMERIC=C
 [3] LC_TIME=en_GB.UTF-8        LC_COLLATE=en_GB.UTF-8
 [5] LC_MONETARY=C              LC_MESSAGES=en_GB.UTF-8
 [7] LC_PAPER=en_GB.UTF-8       LC_NAME=C
 [9] LC_ADDRESS=C               LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_GB.UTF-8 LC_IDENTIFICATION=C

attached base packages:
[1] tools     stats     graphics  grDevices utils     datasets  methods
[8] base


我得到:

> Rd2HTML(z, stages = "build")
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><title>R: abc</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link rel="stylesheet" type="text/css" href="R.css">
</head><body>

<table width="100%" summary="page for abc"><tr><td>abc</td><td align="right">R Documentation</td></tr></table>

<h2>abc</h2>

<h3>Details</h3>

<p><dl>
<dt>def</dt><dd>ghi</dd></dl>
</p>


</body></html>


经过一些排列后,我认为我对此有所了解。

这个

\name{foo}
\alias{foo}
\title{foo bar}
\description{
blah blah blah
}
\details{
\Sexpr[results=rd, stage=render]{"\\\\describe{\\\\item{def}{ghi}}"}

\Sexpr[results=rd, stage=render]{(des <- "\\\\describe{\\\\item{def}{ghi}}")}

\Sexpr[results=rd, stage=render]{tools:::Rd_expr_PR(1234)}
}


有效,例如通过以下方式处理:

R CMD Rd2pdf foo.Rd


当我直接将其写入文件时,我也必须转义转义的\,否则在处理Rd文件时会出错。

我之所以使用stage=render是因为在这些演示中,因为我没有构建软件包(但正如我所说,您的示例对我有用)。

当解析并呈现为HTML时,这也可以正常工作:

> foo <- parse_Rd("foo.Rd")
> Rd2HTML(foo)
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><title>R: foo bar</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link rel="stylesheet" type="text/css" href="R.css">
</head><body>

<table width="100%" summary="page for foo"><tr><td>foo</td><td align="right">R Documentation</td></tr></table>

<h2>foo bar</h2>

<h3>Description</h3>

<p>
blah blah blah
</p>


<h3>Details</h3>

<p>

</p>
<p>
<dl>
<dt>def</dt><dd>ghi</dd></dl>

</p>
<p>
<a href="https://bugs.R-project.org/bugzilla3/show_bug.cgi?id=1234">PR#1234</a>
</p>


</body></html>


一个稍长的示例,展示了可以使用该方法的几种方法,对主题进行了三种变体:


手工产生一个字符向量]
产生一个字符向量并安排将其打印(....)
在一个\Sexpr语句中生成一个字符向量,不产生任何输出,但通过第二个\Sexpr语句打印此向量。


现在是文件的内容:

\name{foo}
\alias{foo}
\title{foo bar}
\description{
blah blah blah
}
\details{
\Sexpr[results=rd, stage=render]{"\\\\describe{\\\\item{abc}{ghi}}"}

\Sexpr[results=rd, stage=render]{(des <- "\\\\describe{\\\\item{def}{ghi}}")}

\Sexpr[results=hide, stage=render]{des2 <- "\\\\describe{\\\\item{xyz}{ghi}}"}
\Sexpr[results=rd, stage=render]{des2}

\Sexpr[results=rd, stage=render]{tools:::Rd_expr_PR(1234)}
}


使用R CMD Rd2pdf foo.Rd可以很好地渲染。

看来,在Rd文件中写入此\时,您需要额外地转义,如果要通过生成要解析和呈现的单个文件来尝试此操作,则需要stage=render

08-25 05:10