Dans R, j'aimerais récupérer une liste de variables globales à la fin de mon script et les parcourir. Voici mon code
#declare a few sample variables
a<-10
b<-"Hello world"
c<-data.frame()
#get all global variables in script and iterate over them
myGlobals<-objects()
for(i in myGlobals){
print(typeof(i)) #prints 'character'
}
Mon problème est que typeof(i)
retourne toujours character
même si variable a
et c
ne sont pas des variables de caractère. Comment puis-je obtenir le type d'origine de variable dans la boucle for?
typeof()
donne une information très générique sur la façon dont l'objet est stocké en mémoire. Pour la plupart des cas d'utilisation, si vous voulez savoir de bonnes informations sur une variablex
, vous obtiendrez plus d' informations utiles à partirclass(x)
,is(x)
oustr(x)
(pour plus de détails de la façon dont ils fournissent). Voir la réponse d'Eric ci-dessous pour des exemples de ce quitypeof()
vous dit: les facteurs sontinteger
; des listes, des blocs de données, des objets de modèle, d'autres objets avancés ne sont quelist
...Réponses:
Vous devez utiliser
get
pour obtenir la valeur plutôt que le nom de caractère de l'objet tel que renvoyé parls
:Sinon, pour le problème tel que présenté, vous pouvez utiliser
eapply
:la source
get
a ses critiques et j'imagine que ceeapply
serait plus rapide qu'une boucle interprétée. Mais il n'y a qu'une seule façon de le savoir ...Comment obtenir le type de variable lorsqu'elle est cachée sous un objet global:
Tout ce dont vous avez besoin est dans le manuel R sur les types de base: https://cran.r-project.org/doc/manuals/R-lang.html#Basic-types
Vos
object()
besoins doivent être pénétrésget(...)
avant de pouvoir voir à l'intérieur. Exemple:Comment obtenir le type de variable que vous avez dans R
La fonction
typeof
R a un biais pour vous donner le type à la profondeur maximale, par exemple.Comment obtenir la classe d'une variable que vous avez dans R
La fonction
class
R a un biais pour vous donner le type de conteneur ou de structure encapsulant vos types, par exemple.Obtenez les données
storage.mode
de votre variableLorsqu'une variable R est écrite sur le disque, la disposition des données change à nouveau et s'appelle les données
storage.mode
. La fonctionstorage.mode(...)
révèle cette information de bas niveau: voir mode, classe, et le type d'objets R . Vous ne devriez pas avoir à vous soucier du mode de stockage de R à moins que vous n'essayiez de comprendre les retards causés par les transferts / coercitions aller-retour qui se produisent lors de l'attribution et de la lecture de données vers et depuis le disque.Idéologie autour du système de typage triade de R:
Le système de typage du canard de R comporte de l'incertitude. Par analogie, considérons une tasse en céramique, elle peut être utilisée pour contenir un liquide, ou utilisée comme projectile comme une balle de baseball. Le but de la tasse dépend de ses propriétés disponibles et de la fonction qui agit sur elle. Cette fluidité de type permet aux programmeurs une plus grande marge de manœuvre pour rediriger tout type de sortie d'une fonction vers une autre fonction, et R fera de grands efforts pour essayer de lire dans vos pensées et faire quelque chose de raisonnable.
L'idée est que lorsque les programmeurs débutants écrivent des programmes R via un mouvement brownien, comme ils le feront, ils tentent de passer a
googah.blimflarg
dans avehicle.subspaceresponder(...)
. Au lieu de vomir une erreur de type, le programme R fait de la gymnastique pour transformer le type et ensuite faire quelque chose d'étonnamment utile. Le programmeur débutant publie le code sur son blog et dit "regardez cette chose formidable que j'ai faite avec 3 lignes de code R! Je ne sais pas comment il sait quoi faire, mais c'est le cas!"la source
Vous pouvez utiliser la classe (x) pour vérifier le type de variable. Si l'exigence est de vérifier le type de toutes les variables d'une trame de données, alors sapply (x, class) peut être utilisé.
la source
J'essaye
class
ettypeof
fonctionne, mais tout échoue.la source
Conçu pour faire essentiellement l'inverse de ce que vous vouliez, voici l'un de mes jouets à outils:
la source
lapply (your_dataframe, class) vous donne quelque chose comme:
$ tikr [1] "facteur"
$ Date [1] "Date"
$ Open [1] "numérique"
$ High [1] "numérique"
... etc.
la source