Каковы ограничения относительно того, какие символы (и, возможно, другие ограничения) могут использоваться для имени переменной в R?
(Этот крик общей ссылки, но я не могу найти ответ)
Каковы ограничения относительно того, какие символы (и, возможно, другие ограничения) могут использоваться для имени переменной в R?
(Этот крик общей ссылки, но я не могу найти ответ)
Возможно, вы ищете обсуждение из ?make.names
:
Синтаксически действительное имя состоит из букв, цифр и точки или подчеркивать символы и начинать с буквы или точки не следовать числом. Имена, такие как ".2way", недействительны, и зарезервированные слова.
В самом файле справки есть ссылка на список зарезервированных слов, которые:
если else повторяется, пока функция в следующем перерыве
ИСТИННЫЙ ЛОЖНЫЙ НУЛЛ Inf NaN NA NA_integer_ NA_real_ NA_complex_ NA_character _
Многие другие замечательные комментарии из комментариев включают точку Джеймса в часто задаваемые вопросы по часто задаваемым вопросам, адресованные этой проблеме, и указатель Josh на связанный SO question, посвященный проверке синтаксически допустимых имен.
Почти NONE! Вы можете использовать 'assign' для создания смешных имен переменных:
assign("1",99)
ls()
# [1] "1"
Да, эта переменная называется "1". Цифра 1. К счастью, это не изменяет значение целого числа 1, и вам нужно немного усердно работать, чтобы получить его значение:
1
# [1] 1
get("1")
# [1] 99
Синтаксические ограничения, о которых могут упомянуть некоторые люди, просто навязываются парсером. В принципе, очень мало вы не можете назвать R-объектом. Вы просто не можете сделать это с помощью оператора присваивания "< -". "get" освободит вас:)
Невозможно напрямую обратиться к вашему вопросу, но он очень помогает.
Попробуйте выполнить команду exists()
, чтобы узнать, существует ли что-то, и вы знаете, что не должны использовать системные имена для ваших переменных или функций.
Пример...
> exists('for')
[1] TRUE
>exists('myvariable')
[1] FALSE
Использование функции 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)
}