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

Что делать в R?

Я пытаюсь понять, что делают обратные записи в R.

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

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

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

Кажется, он возвращает эквивалент:

get("[[")
4b9b3361

Ответ 1

Пара обратных галочек - это способ ссылаться на имена или комбинации символов, которые в противном случае зарезервированы или запрещены. Зарезервированы такие слова, как if являются частью языка, в то время как нелегальные включают не синтаксические комбинации, такие как cat. Эти две категории, зарезервированные и незаконные, упоминаются в документации 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:

Идентификаторы состоят из последовательности букв, цифр, точки (.) И подчеркивания. Они не должны начинаться с цифры, ни подчеркивания, ни с точки, за которой следует цифра. Зарезервированные слова не являются действительными идентификаторами.

Определение буквы зависит от текущей локали, но только цифры ASCII считаются цифрами.

Такие идентификаторы также известны как синтаксические имена и могут использоваться непосредственно в коде R. Почти всегда можно использовать другие имена, если они указаны в кавычках. Предпочтительной deparse ('), и deparse обычно использует ее, но при многих обстоятельствах можно использовать одинарные или двойные кавычки (так как символьная константа часто преобразуется в имя). Единственное место, где обратные пометки могут быть необходимы, - это разделение имен переменных в формулах: см. formula

Эту прозу немного сложно разобрать. Это означает, что для того, чтобы R анализировал токен как имя, оно должно быть 1) последовательностью цифр букв, точки и подчеркивания, что 2) не является зарезервированным словом в языке. В противном случае, чтобы быть проанализированным как имя, необходимо использовать обратные метки.

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

Зарезервированные слова вне кавычек всегда анализируются как ссылки на объекты, связанные с "описанием", и, следовательно, они не допускаются как синтаксические имена (см. make.names). Они допускаются как несинтаксические имена, например, внутри кавычек.

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

Ответ 2

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

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

дает ошибку

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

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

Ответ 3

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

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

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

temp[[1]]

извлечь элемент 1 с помощью функции [[

`[[`(temp,1)