58 votes

Supprimer les guillemets d'un vecteur de caractères dans R

Supposons que vous ayez un vecteur de caractères :

char <- c("one", "two", "three")

Lorsque vous faites référence à une valeur d'indice, vous obtenez ce qui suit :

> char[1]
[1] "one"

Comment enlever les guillemets de la valeur de retour pour obtenir ce qui suit ?

[1] one

0 votes

Vous voulez donc simplement supprimer les guillemets lors de l'impression sur la sortie standard (ou dans un fichier) ?

2 votes

J'essaie de boucler les éléments d'un vecteur de caractères par le biais d'une fonction, mais j'ai besoin que les guillemets soient supprimés.

0 votes

Je suppose que je ne comprends toujours pas l'objectif exact - peut-être que le fait d'afficher l'exemple d'utilisation serait utile.

110voto

AlexArgus Points 1121

Essayez simplement noquote(a)

noquote("a")

[1] a

0 votes

Excellente réponse ! J'utilise R depuis 9 ans et j'apprends toujours de nouvelles fonctions intéressantes.

31voto

Noah Points 1231

as.name(char[1]) fonctionnera, bien que je ne sois pas sûr de la raison pour laquelle vous voudriez vraiment le faire -- les guillemets ne seront pas reportés dans une paste par exemple :

> paste("I am counting to", char[1], char[2], char[3])
[1] "I am counting to one two three"

8 votes

As.name() et as.symbol() convertissent tous deux l'élément char[1] en classe "name". noquote() convertit l'élément char[1] en classe "noquote". Hmmm, je ne savais pas que R avait autant de classes. Merci.

0 votes

Une solution plus simple est donnée par @AlexArgus comme noquote("a")

0 votes

as.name , as.symbol y get tous n'autorisent que les noms inférieurs à 10000 octets. noquote n'a pas cette limite.

30voto

Allan Engelhardt Points 651

Il n'y a pas de guillemets dans la valeur de retour, seulement dans la sortie par défaut de print() lorsque vous affichez la valeur. Essayez

> print(char[1], quote=FALSE)
[1] one

ou

> cat(char[1], "\n")
one

pour voir la valeur sans les guillemets.

20voto

Spacedman Points 33792

Vous confondez le "symbole" de quantmod (un terme relatif à un code pour une quelconque chose financière) avec le "symbole" de R, qui est un "type" dans R.

Vous l'avez dit :

J'ai un vecteur de caractères de stock que je passe à quantmod::getSymbols() et la fonction renvoie le symbole dans l'environnement environnement sans les guillemets

Enfin presque. Ce qu'il fait, c'est créer des objets avec ces noms dans l'environnement spécifié. Je pense que ce que vous voulez faire, c'est récupérer des objets d'un environnement par leur nom. Et pour cela, vous avez besoin de 'get'. Voici un exemple de code qui fonctionne dans l'environnement par défaut :

getSymbols('F',src='yahoo',return.class='ts') [1] "F"

pour que vous ayez un vecteur de caractères des choses que vous voulez :

> z="F"
> z
[1] "F"

et ensuite la magie :

> summary(get(z))
     F.Open           F.High           F.Low           F.Close      
 Min.   : 1.310   Min.   : 1.550   Min.   : 1.010   Min.   : 1.260  
 1st Qu.: 5.895   1st Qu.: 6.020   1st Qu.: 5.705   1st Qu.: 5.885  
 Median : 7.950   Median : 8.030   Median : 7.800   Median : 7.920  
 Mean   : 8.358   Mean   : 8.495   Mean   : 8.178   Mean   : 8.332  
 3rd Qu.:11.210   3rd Qu.:11.400   3rd Qu.:11.000   3rd Qu.:11.180  
 Max.   :18.810   Max.   :18.970   Max.   :18.610   Max.   :18.790  

et si vous ne me croyez pas :

> identical(F,get(z))
[1] TRUE

1 votes

Merci de lire les commentaires, où la vraie question était intégrée. C'est exactement ce que je veux faire - sortir des objets de l'environnement par leur nom. J'ai pensé à tort qu'il suffisait de laisser tomber les guillemets, mais cela n'a pas fonctionné. Maintenant, je dispose de get().

1 votes

+1 , Il y a beaucoup à apprendre de ce que vous avez déclaré, Merci.

6voto

Alex Poma Points 69

Si :

> char<-c("one", "two", "three")

Vous pouvez :

> print(char[1],quote = FALSE)

Votre résultat devrait être :

[1] one

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X