web-dev-qa-db-fra.com

Restrictions de nom de variable dans R

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)

45
Kyle Brandt

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.

35
joran

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 :)

23
Spacedman

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
6
Stat-R

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)
}
2
omarflorez