Ограничения имени переменной в R - PullRequest
45 голосов
/ 08 февраля 2012

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

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

Ответы [ 4 ]

34 голосов
/ 08 февраля 2012

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

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

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

если еще повторить функцию while для следующего перерыва

TRUE FALSE NULL Inf NaN NA NA_integer_ NA_real_ NA_complex_ NA_character_

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

23 голосов
/ 08 февраля 2012

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

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

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

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

«Синтаксические ограничения», которые некоторые люди могут упомянуть, налагаются чистосинтаксический анализатор.По сути, очень мало что нельзя назвать объектом R.Вы просто не можете сделать это через оператор присваивания «<-».«get» освободит вас:) </p>

5 голосов
/ 16 марта 2012

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

   > exists('for')
   [1] TRUE

   >exists('myvariable')
   [1] FALSE
2 голосов
/ 25 февраля 2017

Использование функции 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)
}
...