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

Ограничения имен переменных в R

Каковы ограничения относительно того, какие символы (и, возможно, другие ограничения) могут использоваться для имени переменной в R?

(Этот крик общей ссылки, но я не могу найти ответ)

4b9b3361

Ответ 1

Возможно, вы ищете обсуждение из ?make.names:

Синтаксически действительное имя состоит из букв, цифр и точки или подчеркивать символы и начинать с буквы или точки не следовать числом. Имена, такие как ".2way", недействительны, и зарезервированные слова.

В самом файле справки есть ссылка на список зарезервированных слов, которые:

если else повторяется, пока функция в следующем перерыве

ИСТИННЫЙ ЛОЖНЫЙ НУЛЛ Inf NaN NA NA_integer_ NA_real_ NA_complex_ NA_character _

Многие другие замечательные комментарии из комментариев включают точку Джеймса в часто задаваемые вопросы по часто задаваемым вопросам, адресованные этой проблеме, и указатель Josh на связанный SO question, посвященный проверке синтаксически допустимых имен.

Ответ 2

Почти NONE! Вы можете использовать 'assign' для создания смешных имен переменных:

assign("1",99)
ls()
# [1] "1"

Да, эта переменная называется "1". Цифра 1. К счастью, это не изменяет значение целого числа 1, и вам нужно немного усердно работать, чтобы получить его значение:

1
# [1] 1
get("1")
# [1] 99

Синтаксические ограничения, о которых могут упомянуть некоторые люди, просто навязываются парсером. В принципе, очень мало вы не можете назвать R-объектом. Вы просто не можете сделать это с помощью оператора присваивания "< -". "get" освободит вас:)

Ответ 3

Невозможно напрямую обратиться к вашему вопросу, но он очень помогает. Попробуйте выполнить команду exists(), чтобы узнать, существует ли что-то, и вы знаете, что не должны использовать системные имена для ваших переменных или функций. Пример...

   > exists('for')
   [1] TRUE

   >exists('myvariable')
   [1] FALSE

Ответ 4

Использование функции make.names() из встроенного базового пакета может помочь:

is_valid_name<- function(x)
{
  length_condition = if(getRversion() < "2.13.0") 256L else 10000L
  is_short_enough = nchar(x) <= length_condition
  is_valid_name = (make.names(x) == x)

  final_condition = is_short_enough && is_valid_name
  return(final_condition)
}