Что делают backticks в R?


Я пытаюсь понять, что делают backticks в R.

Из того, что я могу сказать, это не объясняется на странице документации ?Quotes для R.

Например, на консоли R:

"[["
# [1] "[["
`[[`
# .Primitive("[[")

Похоже, что он возвращает эквивалент:

get("[[")
3 15

3 ответа:

Пара обратных указателей-это способ ссылаться на имена или комбинации символов, которые в противном случае зарезервированы или запрещены. Зарезервированные слова, такие как if, являются частью языка, в то время как незаконные включают в себя не синтаксические комбинации, такие как c a t. Эти две категории, зарезервированные и незаконные, упоминаются в документации R как non-syntactic names.

Таким образом,

`c a t` <- 1 # is valid R

И

> `+` # is equivalent to typing in a syntactic function name
function (e1, e2)  .Primitive("+")

Как упоминалось комментатором, ?Quotes содержит некоторую информацию о задней панели, под Names and Identifiers:

Identifiers consist of a sequence of letters, digits, the period
 (‘.’) and the underscore.  They must not start with a digit nor
 underscore, nor with a period followed by a digit.  Reserved words
 are not valid identifiers.

 The definition of a _letter_ depends on the current locale, but
 only ASCII digits are considered to be digits.     

 Such identifiers are also known as _syntactic names_ and may be
 used directly in R code.  Almost always, other names can be used
 provided they are quoted.  The preferred quote is the backtick
 (‘`’), and ‘deparse’ will normally use it, but under many
 circumstances single or double quotes can be used (as a character
 constant will often be converted to a name).  One place where
 backticks may be essential is to delimit variable names in
 formulae: see ‘formula’.
Эту прозу немного трудно разобрать. Это означает, что для того, чтобы R разбирал токен как имя, он должен быть 1) последовательностью букв цифр, точки и подчеркивания, что 2) не является зарезервированным словом в языке. В противном случае, чтобы быть проанализированным как имя, должны использоваться обратные метки.

Также проверьте ?Reserved:

 Reserved words outside quotes are always parsed to be references
     to the objects linked to in the ‘Description’, and hence they are
     not allowed as syntactic names (see ‘make.names’).  They *are*
     allowed as non-syntactic names, e.g. inside backtick quotes.

Кроме того, Advanced R имеет несколько примеров использования обратных меток в выражениях , среды , и функции .

Они эквивалентны дословно. Например... попробуйте это:

df <- data.frame(20a=c(1,2),b=c(3,4))

Дает ошибку

df <- data.frame(`20a`=c(1,2),b=c(3,4))

Не дает ошибки

Вот неполный ответ с использованием неправильной лексики: backticks может указать R, что вы используете функцию нестандартным способом. Например, здесь используется [[, функция подстановки списка:

temp <- list("a"=1:10, "b"=rnorm(5))

Извлеките элемент один обычным способом

temp[[1]]

Извлеките первый элемент с помощью функции [[

`[[`(temp,1)