Quelles sont les restrictions quant aux caractères (et peut-être d'autres restrictions) qui peuvent être utilisés pour un nom de variable dans R?
(Cela crie des références générales, mais je n'arrive pas à trouver la réponse)
Vous cherchez peut-être la discussion de ?make.names
:
Un nom syntaxiquement valide se compose de lettres, de chiffres et du point ou des caractères de soulignement et commence par une lettre ou le point non suivi d'un nombre. Des noms tels que ".2way" ne sont pas valides, ni les mots réservés.
Dans le fichier d'aide lui-même, il y a un lien vers une liste de mots réservés, qui sont:
sinon, répéter pendant la fonction pendant la pause suivante
TRUE FALSE NULL Inf NaN NA NA_integer_ NA_real_ NA_complex_ NA_character_
Beaucoup d'autres bonnes notes des commentaires incluent le point de James sur le R FAQ traitant de ce problème et le pointeur de Josh sur un SO question traitant de la vérification des noms syntaxiquement valides.
Presque AUCUN! Vous pouvez utiliser 'assign' pour créer des noms de variables ridicules:
assign("1",99)
ls()
# [1] "1"
Oui, c'est une variable appelée "1". Chiffre 1. Heureusement, cela ne change pas la valeur de l'entier 1, et vous devez travailler un peu plus pour obtenir sa valeur:
1
# [1] 1
get("1")
# [1] 99
Les "restrictions syntaxiques" que certains pourraient mentionner sont purement imposées par l'analyseur. Fondamentalement, vous ne pouvez pas appeler un objet R. Vous ne pouvez tout simplement pas le faire via l'opérateur d'affectation "<-". "get" vous libérera :)
Ce qui suit peut ne pas répondre directement à votre question mais est d'une grande aide. Essayez la commande exists()
pour voir si quelque chose existe déjà et de cette façon vous savez que vous ne devez pas utiliser les noms de système pour vos variables ou fonctions. Exemple...
> exists('for')
[1] TRUE
>exists('myvariable')
[1] FALSE
L'utilisation de la fonction make.names () du package de base intégré peut aider:
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)
}