Передача аргументов по позиции против имени
=
символа играет особую роль в именовании аргументов вызова функции.
Рассмотрим две по существу идентичные функции:
f <- function(..., y=3) (2+sum(...))^y
g <- function(y=3, ...) (2+sum(...))^y
Если y=
не поименован, результаты обычно являются различными:
f(y=5) # 32
g(y=5) # 32
f(5) # 343
g(5) # 32
rm
, как f
- тип ?rm
увидеть - так что если вы хотите позвонить rm(list = ls())
, напишите его полностью.
Представляющие имена объектов
В большинстве R, если вы пишете f(g())
, оценка естественно вытекает:
g()
оценивается в 8
и подставляется в f(g())
для f(8)
f(8)
оценивается до 1000
rm
разрывает этот шаблон в своих неназванных аргументах ...
, которые в основном существуют только для интерактивного использования. Разрешены только введенные вручную имена переменных. В результате rm(ls())
не будет работать.
Hadley Викхам provides another nice example:
ggplot2 <- "plyr"
library(ggplot2) # loads ggplot2, not plyr!
† Хорошо, вы можете использовать ...
без вручную типизированных имена, как
do.call(library, as.list(ggplot2)) # loads plyr!
но не м с этим, если вы не знаете, что делаете.
попробуйте 'args (rm)'. – jangorecki
Помогите (rm) 'посмотреть, какие параметры' rm' принимает. 'list' - это имя одного из параметров. Вы можете предоставлять параметры для функций позиционно и/или с явными именами. Причина явного имени здесь в том, что список параметров функции начинается с '...'. Если вы не укажете один из названных параметров по имени, 'rm' не имеет представления о ваших намерениях, так как вы можете удалить любое количество отдельных объектов в среде с помощью' rm' в том же вызове. Это единственный раз (IMO), который вы должны использовать '=' при выполнении назначений параметров функции. – hrbrmstr
Dupe # 1: http://stackoverflow.com/questions/1741820/assignment-operators-in-r-and –