Что. (точка) и% (процент) означают в R?
Мой вопрос может показаться глупым, но я заметил, что .
а также %
часто используется в R
и, честно говоря, я не знаю, почему это используется.
Я видел это в dplyr
(иди сюда для примера) и data.table
(т.е. .SD
) но я уверен, что это должно быть использовано и в другом месте.
Поэтому мой вопрос:
- Что значит
.
имею в виду? Это какой-тоR
кодирование наилучшей практики номенклатуры? (т.е._functionName
часто используется вjavascript
указать, что это частная функция). Если да, каково правило? - Тот же вопрос для
%
, который также часто используется в R (т.е.%in%
,%>%
,...).
Мое предположение всегда было таким .
а также %
это удобный способ быстро вызвать функцию, но способ data.table
использования .
не следует этой логике, которая меня смущает.
2 ответа
.
не имеет никакого врожденного / магического значения в R. Это просто еще один символ, который вы можете использовать в именах символов. Но так как его так удобно печатать, ему придавалось особое значение определенными функциями и соглашениями в R. Вот лишь несколько
.
используется поиск в реализациях универсальных методов S3. Например, если вы вызываете универсальную функцию, такую какplot
с объектом классаlm
в качестве первого параметра, он будет искать функцию с именемplot.lm
и, если найден, позвоните.- довольно часто
.
в формулах означает "все остальные переменные", например,lm(y~., data=dd)
будет регрессy
на всех других переменных в data.framedd
, - библиотеки как
dplyr
используйте его как специальное имя переменной, чтобы указать текущий data.frame для таких методов, какdo()
, Они могли бы также легко использовать имя переменнойX
вместо - функции как
bquote
использование.()
как специальная функция для экранирования переменных в выражениях - Переменные, начинающиеся с точки, считаются скрытыми и не отображаются с
ls()
если вы не позвонитеls(all.names=TRUE)
(аналогично поведению файловой системы UNIX)
Тем не менее, вы также можете просто определить переменную с именем my.awesome.variable<-42
и он будет работать так же, как и любая другая переменная.
%
само по себе ничего особенного не означает, но R позволяет вам определять свои собственные инфиксные операторы в виде %<something>%
используя два знака процента. Если вы определите
`%myfun%` <- function(a,b) {
a*3-b*2
}
Вы можете назвать это как
5 %myfun% 2
# [1] 11
Ответ MrFlick не распространяется на использование .
в data.table
;
В data.table
, .
является (по существу) псевдонимом для list
так что любой * вызов [.data.table
который принимает list
также может быть передан объект, завернутый в .()
,
Таким образом, следующее эквивалентно:
DT[ , .(x, y)]
DT[ , list(x, y)]
* ну, не совсем. любое использование в аргументе j, да; в другом месте идет работа, смотрите здесь.