R: Пример выполнения функции пакета: странное поведение
Я не очень понимаю, почему поведение example
отличается, если я ввожу имя строки вручную, когда я использую ls
функция. Рассмотрим функцию ниже:
> ls("package:LIM")[1]
[1] "FILERigaAutumn"
Если я приведу пример так:
> example(ls("package:LIM")[1])
Warning message:
In example(ls("package:LIM")[1]) : no help found for ‘ls("package:LIM")[1]’
И, похоже, не выполнить пример. Но когда я запускаю его напрямую:
> example("FILERigaAutumn")
Я получаю много выходных данных и пример выполнен.
Тип передаваемого аргумента выглядит одинаково:
> typeof("FILERigaAutumn")
[1] "character"
> typeof( ls("package:LIM")[1])
[1] "character"
У кого-нибудь есть идеи почему? Я хочу вычислить время выполнения всех примеров в одном пакете:
for (func in ls("package:LIM")){system.time(example(func))}
1 ответ
library
, require
, example
и, возможно, несколько других функций можно использовать с кавычками и без них:
example(runif)
example("runif")
Чтобы разрешить версию без кавычек, эти функции преобразуют первый аргумент в символ (без его оценки), вызывая:
deparse(subsitute(x))
в результате чего:
deparse(substitute(ls("package:LIM")[1]))
# [1] "ls(\"package:LIM\")[1]"
Чтобы обойти это (оценить аргумент), вы должны использовать character.only
аргумент.
example(ls("package:LIM")[1], character.only=TRUE)
ИМХО такое поведение не очень последовательное (character.only=TRUE
должно быть по умолчанию), и я не вижу никаких преимуществ (хорошо, вы можете использовать завершение табуляции в не цитируемой версии).