Подтвердить что ты не робот

Частичное совпадение аргумента функции

Я знаю, что для списка частичное совпадение выполняется при индексировании с использованием основных операторов $ и [[. Например:

ll <- list(yy=1)
ll$y
[1] 1

Но я все еще новичок R, и это ново для меня, частичное совпадение аргументов функции:

h <- function(xx=2)xx
h(x=2)
[1] 2

Я хочу понять, как это работает. Каков механизм этого? Имеет ли это какие-либо побочные эффекты? Я хочу понять, как кто-то может проверить, был ли аргумент xx указан?

Редактировать после комментария Andrie:

Internally R использует pmatch алгоритм для сопоставления аргумента, вот пример того, как это работает:

 pmatch("me",   c("mean", "median", "mode")) # error multiple partial matches
[1] NA
> pmatch("mo",   c("mean", "median", "mode")) # mo match mode match here
[1] 3

Но почему R имеет такую ​​особенность? Какова основная идея соответствия partial unique?

4b9b3361

Ответ 1

Частичное сопоставление существует, чтобы сохранить ввод длинных имен аргументов. Опасность заключается в том, что функции могут получить дополнительные аргументы, после которых конфликт с вашим частичным соответствием. Это означает, что он подходит только для интерактивного использования – если вы пишете код, который будет храниться в течение длительного времени (например, идти в пакете), вы должны всегда писать полное имя аргумента. Другая проблема заключается в том, что, сократив имя аргумента, вы можете сделать свой код менее удобочитаемым.

Два общих преимущества:

  • len вместо length.out с функцией seq (или seq.int).

  • all вместо all.names с функцией ls.

Для сравнения:

seq.int(0, 1, len = 11) 
seq.int(0, 1, length.out = 11)

ls(all = TRUE)
ls(all.names = TRUE)

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

Лучшее решение для сохранения при наборе текста вместо использования сокращенных имен используется для автоматического завершения имен переменных и аргументов. R GUI и RStudio поддерживают это с помощью клавиши TAB, а Architect поддерживает это с помощью CTRL + Space.