Числа как имена столбцов фреймов данных

Есть ли причина, по которой R не позволит мне использовать число в качестве имени столбца моего фрейма данных?

Также заметил, что если я делаю data.frame(XX), он добавляет X ко всем заголовкам столбцов, у которых есть числа впереди.


person Nathaniel Saxe    schedule 06.08.2010    source источник


Ответы (2)


Да, потому что R не позволяет именам объектов начинаться с цифр. Если бы вы вызвали attach() с data.frame, это вызвало бы некоторые проблемы.

Функция data.frameread.table) имеет параметр check.names (по умолчанию TRUE)

Если TRUE, то имена переменных во фрейме данных проверяются, чтобы убедиться, что они являются синтаксически допустимыми именами переменных и не дублируются. При необходимости они подгоняются (по make.names) так, чтобы они были.

От ?make.names:

Синтаксически правильное имя состоит из букв, цифр и символов точки или подчеркивания и начинается с буквы или точки, за которой не следует цифра. [...] При необходимости добавляется символ «X».

person Shane    schedule 06.08.2010
comment
Да, вчера я объяснял это в отношении именования фреймов данных. - person Dirk Eddelbuettel; 06.08.2010
comment
Есть причина для этого? или это просто то, что никто не возражает? Это не такое большое дело, чтобы поставить X перед любыми числами, которые я хочу использовать в качестве заголовков, но мне просто интересно, ПОЧЕМУ R не позволяет мне. - person Nathaniel Saxe; 06.08.2010
comment
Вы до сих пор не понимаете. Перечитайте ответ Шейна, подумайте о attach() и поймите, почему у них должны быть имена переменных. Как показывает Марек, вы могли сделать это, но это не значит, что вы должны. - person Dirk Eddelbuettel; 06.08.2010

Работает на меня

data.frame(`1`=rnorm(3), `2`=head(letters,3), check.names=FALSE)
#        1 2
# 1 0.5019 a
# 2 1.1148 b
# 3 0.4787 c
person Marek    schedule 06.08.2010
comment
Спасибо. Я понял про числа, но кажется, что какой-то текст в юникоде запрещен. Когда я использую фрейм только для форматирования, ваше предложение пригодится. - person Steven R. Loomis; 16.12.2011