2012-02-08 12 views
39

¿Cuáles son las restricciones en cuanto a qué caracteres (y tal vez otras restricciones) pueden usarse para un nombre de variable en R?Restricciones de nombre de variable en R

(Esta grita de referencia general, pero me parece que no puede encontrar la respuesta)

+3

R FAQ 7,14: http://cran.r-project.org /doc/FAQ/R-FAQ.html#What-are-valid-names_003f – James

+1

Puede que también le interese la discusión aquí: http://stackoverflow.com/questions/8396577/check-if-character-value-is -a-valid-r-object-name/8396658 # 8396658 –

+0

Debería haber encontrado el enlace a '? make.names' en la página de ayuda de' read.table'. La página de ayuda que siempre me cuesta recordar es la que describe los caracteres de escape permitidos y la respuesta es '? Quotes'. –

Respuesta

31

Usted podría estar buscando la discusión de ?make.names:

Un nombre sintácticamente válida consiste en letras, números y el punto o subrayan caracteres y comienzan con una letra o el punto no seguido por un número. Los nombres como ".2way" no son válidos, y tampoco lo son las palabras reservadas.

En el archivo de ayuda en sí, hay un enlace a una lista de palabras reservadas, que son:

si repita otra cosa mientras que la función en el próximo descanso

nula verdadera FALSO Inf NaN NA NA_integer_ NA_real_ NA_complex_ NA_character_

Muchas otras buenas notas de las observaciones incluyen el punto de James a la R FAQ abordando este problema y el puntero de Josh a un SO question relacionado que trata de verificar nombres sintácticamente válidos.

+0

Tenga en cuenta que puede usar cualquier cosa si cita el nombre de su variable, por ejemplo, '' TRUE' <-2' es válido. No puedo escribir esto correctamente usando la sintaxis SO :( – James

+0

Por supuesto, mi problema era que estaba buscando en Google los caracteres inversos ("restricciones") o básicamente * inválidos cuando debería haber estado buscando caracteres * válidos *. –

+1

Además, un punto en sí mismo es válido. '. = 3; print (.)' –

19

Almost NONE! Puede usar 'assign' para hacer nombres de variable ridículos:

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

Sí, esa es una variable llamada '1'. Dígito 1. Por suerte eso no cambia el valor de número entero 1, y hay que trabajar un poco más difícil de conseguir su valor:

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

Las "restricciones sintácticas" algunas personas pueden mencionar son meramente impuesta por el analizador. Fundamentalmente, hay muy poco que no puedas llamar un objeto R. Simplemente no puede hacerlo a través del operador de asignación '< -'. "obtener" lo liberará :)

+0

¿No hay restricciones literalmente? usando 'assign' y' get', o se topa con algunos limitaciones en algún punto? – joran

+10

Creo que la frase es "suficiente cuerda para ahorcarse" :-P –

+1

? assign: "No hay restricciones en 'nombre': c un nombre no sintáctico (ver 'make.names'). ". Esto es, por supuesto, una mentira: c = pegar (rep (letters, 10000), collapse = ""); assign (c, 123) produce: Error en la asignación (c, 123): los nombres de las variables están limitados a 10000 bytes – Spacedman

2

Lo siguiente puede no abordar su pregunta directamente pero es de gran ayuda. Pruebe el comando exists() para ver si algo ya existe y de esta manera usted sabe que no debe usar los nombres del sistema para sus variables o función. Ejemplo ...

> exists('for') 
    [1] TRUE 

    >exists('myvariable') 
    [1] FALSE 
+0

No entiendo por qué esta respuesta fue downvoted, para mí es, en cualquier caso, una información utilizable. – Halberdier

0

Utilizando los make.names() desde el construido en el paquete base puede ayudar a:

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) 
} 
Cuestiones relacionadas