Комментарий - что-то, что я рассматривал бы как обоюдоострый меч, так как слишком много комментирует, может, конечно, привести к меньшей удобочитаемости. Jeff записал превосходную статью об этом
, Расположение с отступом наоборот никогда не повреждает и увеличивает достижение удобочитаемости. Это - одна причина, почему столько людей как Python с он - значительный пробел.
Вы можете получить неоцененные аргументы функции через match.call
. Например:
> x <- function(y) print(match.call()[2])
> x(lm)
lm()
Другой подход - передать имена функций в функцию отчета, а затем получить сами функции с помощью команды get ()
. Например:
function.names <- c("which","all")
fun1 <- get(function.names[1])
fun2 <- get(function.names[2])
Тогда у вас есть имена в исходном векторе символов, а у функций есть новые имена, как вы их определили. В этом случае функция all
теперь вызывается как fun2
:
> fun2(c(TRUE, FALSE))
[1] FALSE
Или, если вы действительно хотите сохранить исходные имена функций, просто назначьте их локально с помощью функции assign :
assign(function.names[2], get(function.names[2]))
Если вы запустите эту команду прямо сейчас, вы получите функцию all
в вашем ". GlobalEnv"
. Вы можете увидеть это с помощью ls ()
.
That may lead to parse(eval(...))
at which point you are open for this critique:
R> library(fortunes)
R> fortune("parse")
If the answer is parse() you should usually rethink the question.
-- Thomas Lumley
R-help (February 2005)
R>
So do your functions have to be called MyFunction.1
etc pp?
When a function is passed around as an object, it loses its name. See, for example, the results of the following lines:
str(lm)
lm
You can get the arguments and the body of the function, but not the name.
My suggestion would be to construct a named list of functions, where the name could be printed:
> somefns <- list(lm=lm, aggregate=aggregate)
> str(somefns)
List of 2
$ lm :function (formula, data, subset, weights, na.action, method = "qr",
model = TRUE, x = FALSE, y = FALSE, qr = TRUE, singular.ok = TRUE,
contrasts = NULL, offset, ...)
$ aggregate:function (x, ...)
> somefns[[1]](dist ~ speed, data=cars)
Call:
somefns[[1]](formula = dist ~ speed, data = cars)
Coefficients:
(Intercept) speed
-17.58 3.93
> names(somefns)[[1]]
[1] "lm"