My question might sound stupid but I have noticed that .
and %
is often used in R
and to be frank I don't really know why it is used.
I have seen it in dplyr
(go here for an example) and data.table
(i.e. .SD
) but I am sure it must be used in other place as well.
Therefore, my question is:
.
mean? Is it some kind of R
coding best practice nomenclature? (i.e. _functionName
is often used in javascript
to indicate it is a private function). If yes, what's the rule?%
, which is also often used in R (i.e. %in%
,%>%
,...).My guess always has been that .
and %
are a convenient way to quickly call function but the way data.table
uses .
does not follow this logic, which confuses me.
The %.% operator in dplyr allows one to put functions together without lots of nested parentheses. The flanking percent signs are R's way of denoting infix operators; you might have used %in% which corresponds to the match function or %*% which is matrix multiplication.
The dot you see with the is_spam~. command means that there are no explanatory variables.
.
has no inherent/magical meaning in R. It's just another character that you can use in symbol names. But because it is so convenient to type, it has been given special meaning by certain functions and conventions in R. Here are just a few
.
is used look up S3 generic method implementations. For example, if you call a generic function like plot
with an object of class lm
as the first parameter, then it will look for a function named plot.lm
and, if found, call that..
in formulas means "all other variables", for example lm(y~., data=dd)
will regress y
on all the other variables in the data.frame dd
.dplyr
use it as a special variable name to indicate the current data.frame for methods like do()
. They could just as easily have chosen to use the variable name X
insteadbquote
use .()
as a special function to escape variables in expressionsls()
unless you call ls(all.names=TRUE)
(similar to the UNIX file system behavior) However, you can also just define a variable named my.awesome.variable<-42
and it will work just like any other variable.
A %
by itself doesn't mean anything special, but R allows you to define your own infix operators in the form %<something>%
using two percent signs. If you define
`%myfun%` <- function(a,b) {
a*3-b*2
}
you can call it like
5 %myfun% 2
# [1] 11
MrFlick's answer doesn't cover the usage of .
in data.table
;
In data.table
, .
is (essentially) an alias for list
, so any* call to [.data.table
that accepts a list
can also be passed an object wrapped in .()
.
So the following are equivalent:
DT[ , .(x, y)]
DT[ , list(x, y)]
*well, not quite. any use in the j argument, yes; elsewhere is a work in progress, see here.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With