Получение объектов в ситуации, когда их имя имеет значение - PullRequest
1 голос
/ 28 июля 2011

У меня есть список функций, для которых я хотел бы сделать документацию. Мой вопрос не о том, как это сделать, но он предоставляет удобный пример того, что мне интересно.

prompt принимает функцию и символьную строку в качестве аргументов и записывает файл справки по этой функции в файл, представленный путем символьной строки. При зацикливании файлов использование prompt(f,filename=...) не работает, так как f имеет тип символа. Я попробовал get(f), который прекрасно вытягивает функцию, но не дает достаточно оперативной информации для работы (см. Ниже). Так как же заставить символьный элемент возвращать весь объект, а не только функцию, которую он называет?

files <- c("current.market","current.portfolio.bond","fund","genAccount","genHistory.market","history.market","maRketSim.version","summary.vasicek.discrete","vasicek.discrete")
for(f in files) {
  prompt( get(f), filename=paste("c:/myproject/man/",f,".Rd",sep="") )
}
Error in prompt.default(get(f), filename = paste("F:/Documents/R-projects/maRketSim/man/",  : 
  cannot determine a usable name

1 Ответ

2 голосов
/ 28 июля 2011

?prompt говорит нам, что

Arguments:

  object: an R object, typically a function for the default method.
          Can be ‘missing’ when ‘name’ is specified.

Так что я думаю, prompt() уже делает то, что вы хотите:

> prompt(name = "print", filename = "print.Rd")
Created file named 'print.Rd'.
Edit the file and move it to the appropriate directory.

, который производит соответствующий файл Rd:

> writeLines(readLines("~/print.Rd"))
\name{print}
\alias{print}
%- Also NEED an '\alias' for EACH other topic documented here.
\title{
%%  ~~function to do ... ~~
}
\description{
%%  ~~ A concise (1-5 lines) description of what the function does. ~~
}
\usage{
print(x, ...)
}
%- maybe also 'usage' for other objects documented here.
\arguments{
  \item{x}{
%%     ~~Describe \code{x} here~~
....

Я должен добавить, что get("foo") возвращает фактическую функцию, это просто способ, которым кодируется prompt(), что он не может работать с анонимной функцией, возвращаемойget().

...