Все мы знаем, что в функции collapse есть аргумент paste(). Он ссылается на необязательную строку символов для разделения результатов:
paste(1:5, collapse = ", ")
[1] "1, 2, 3, 4, 5"
Но также, когда аргумент collapse написан с ошибкой - например. cpllapse - вызов не вызывает ошибки, хотя результат сбивает с толку:
paste(1:5, cpllapse = ", ")
[1] "1 , " "2 , " "3 , " "4 , " "5 , "
Я погуглил параметр cpllapse в R, но ничего не нашел.
Почему не возникает ошибка paste() при использовании аргумента с ошибкой и как можно объяснить результат? Или на самом деле в cpllapse есть параметр paste()?
Формальными именованными параметрами paste() являются sep, collapse и recycle0. Другие будут переданы ... независимо от их имен. Так что paste(c(1:5), cpllapse = ", ") эквивалентно paste(c(1:5), ", ") или даже paste(c(1:5), anything_else = ", ")
Paste имеет эллипсы ... в качестве первого параметра. Многоточие собирает все аргументы функции, которые не соответствуют ни одному из именованных параметров paste.
На странице помощи написано:
... один или несколько объектов R для преобразования в векторы символов.
Вы передаете два объекта R, и не имеет значения, что один из них является именованным аргументом, из-за того, как многоточие и сопоставление аргументов работают в R. Как обычно в R, входные векторы перерабатываются до длины самого длинного входного вектора.
То, что вы там делаете, в основном то же самое, что и paste(1:5, rep(", ", 5), sep = " ").
Также связанный раздел о ... в книге Хэдли: «Использование ... имеет свою цену — любые аргументы с ошибками не вызовут ошибку, и любые аргументы после ... должны быть полностью названы. Это позволяет легко опечатки остаться незамеченными»
Нет cpllapse аргумента. Нераспознанные аргументы — это просто вариативный ввод.