R - Ellipse (`...`) и `NULL` в параметрах функции - PullRequest
0 голосов
/ 30 января 2019

Envision

examplefn <- function(x = NULL, ...){str(x)}

Я пытаюсь заставить эту функцию соблюдать неявное x = NULL.Рассмотрим следующее:

Для вызова с использованием x и ... это приводит к ожидаемому результату:

> examplefn(1,2)
num 1

При использовании явного x = NULL поведение также имеет видОжидается:

> examplefn(x = NULL,2)
NULL

Однако при попытке (и ожидая использования x = NULL из определения функции я получаю:

> examplefn(2)
num 2

Подразумевается, что вызов оценивается аргументомпорядок, игнорируя определение x = NULL.

Как можно предотвратить последнее?

1 Ответ

0 голосов
/ 30 января 2019

Определение x = NULL используется, только если не указано значение x.Поэтому при написании examplefn(2) то, что читает R, равно examplefn(x = 2) (поскольку x - аргумент номер 1) и, следовательно, результат.

Если вы хотите обойти это, вот несколько подходов:

1. Путем создания двух функций

fun0 <- function (x, ...) str(x) 
fun1 <- function (...) fun0(NULL, ...)
fun1(2)
# NULL

2. Другой подход заключается в присвоении имен аргументам, например,

fun2 <- function (x = NULL, y) str(x)
fun2(y = 2) 
# NULL

3. Другой способ, возможно, наиболее удобный для вас, это просто изменить порядок аргументов, см.

fun3 <- function (..., x = NULL) str(x)
fun3(2)  
# NULL

4. Наконец, здесь также(тривиальная) возможность - установить x <- NULL внутри функции

fun4 <- function (...) {
  x <- NULL
  str(x)
}
fun4(2)    
# NULL

Но я предполагаю, что у вас есть причины хотеть, чтобы x был аргументом.

...