Как получить доступ к исходным файлам справки/документации .rd в R?

В R одна очень удобная функция заключается в том, что исходный код функций доступен как объекты в рабочей области.

Таким образом, если я хотел знать исходный код, например, grep(), я просто могу ввести grep в консоль и прочитать код.

Аналогично, я могу прочитать документацию для grep, введя ?grep в консоль.

Вопрос: Как я могу получить исходный код для документации функции? Другими словами, где я могу найти файлы .rd?

Я нахожу изучение источника хорошо написанного кода отличным способом изучения идиом. Теперь я хочу изучить, как писать документы для некоторых очень конкретных случаев. Я не смог найти файлы документации для любой из базовых функций R в моей установке R. Возможно, я искал не то место.

Ответы

Ответ 1

Кажется, вы можете извлечь Rd-источники из установленного R. Я использую R-devel (2011-09-05 r56942).

Получить базу данных Rd для базового пакета.

library(tools)
db <- Rd_db("base")

Найдите "grep.Rd" в именах Rd DB, например:

grep("grep.Rd", names(db), value = TRUE)
[1] "d:/murdoch/recent/R64/src/library/base/man/agrep.Rd"
[2] "d:/murdoch/recent/R64/src/library/base/man/grep.Rd" 

Получить только объект Rd для grep.

db[grep("/grep.Rd", names(db))]
$`d:/murdoch/recent/R64/src/library/base/man/grep.Rd`
\title{Pattern Matching and Replacement}
\name{grep}
\alias{grep}
\alias{grepl}
\alias{sub}
\alias{gsub}
\alias{regexpr}
\alias{gregexpr}
\alias{regexec}
\keyword{character}
\keyword{utilities}
\description{
\code{grep}, \code{grepl}, \code{regexpr} and \code{gregexpr} search
for matches to argument \code{pattern} within each element of a
character vector: they differ in the format of and amount of detail in
the results.

\code{sub} and \code{gsub} perform replacement of the first and all
matches respectively.
}\usage{
...
...

Есть инструменты для получения компонентов из объектов Rd, поэтому вы можете уточнить поиск по ключевым словам или имени, см. примеры в? Rd_db и попробовать это.

lapply(db, tools:::.Rd_get_metadata, "name")