En R, me gustaría recuperar una lista de variables globales al final de mi script e iterar sobre ellas. Aqui esta mi codigo
#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'
}
Mi problema es que typeof(i)
siempre regresa character
aunque sea variable a
y c
no sean variables de carácter. ¿Cómo puedo obtener el tipo original de variable dentro del bucle for?
typeof()
proporciona una información muy genérica sobre cómo se almacena el objeto en la memoria. Para la mayoría de los casos de uso, si usted quiere saber una buena información sobre una variablex
, obtendrá una información más útil a partir declass(x)
,is(x)
ostr(x)
(en orden de la cantidad de detalles que proveen). Vea la respuesta de Eric a continuación para ver ejemplos de lo quetypeof()
le dice: los factores soninteger
; listas, marcos de datos, objetos modelo, otros objetos avanzados son sololist
...Respuestas:
Debe usar
get
para obtener el valor en lugar del nombre del carácter del objeto como lo devuelvels
:Alternativamente, para el problema tal como se presenta, es posible que desee utilizar
eapply
:fuente
get
tiene sus críticos y me imaginoeapply
que sería más rápido que un bucle interpretado. Pero solo hay una forma de averiguarlo ...Cómo obtener el tipo de variable cuando se oculta debajo de un objeto global:
Todo lo que necesita está en el manual de R sobre tipos básicos: https://cran.r-project.org/doc/manuals/R-lang.html#Basic-types
Sus
object()
necesidades a ser penetrados conget(...)
antes de poder ver el interior. Ejemplo:Cómo obtener el tipo de variable que tienes en R
La función
typeof
R tiene un sesgo para darle el tipo a la profundidad máxima, por ejemplo.Cómo obtener la clase de una variable que tienes en R
La función
class
R tiene un sesgo para darle el tipo de contenedor o estructura que encapsula sus tipos, por ejemplo.Obtén los datos
storage.mode
de tu variableCuando se escribe una variable R en el disco, el diseño de los datos cambia una vez más y se denomina datos
storage.mode
. La funciónstorage.mode(...)
revela esta información bajo nivel: véase modo, clase y tipo de objetos R . No debería tener que preocuparse por el modo de almacenamiento de R a menos que esté tratando de comprender los retrasos causados por las transmisiones / coerciones de ida y vuelta que se producen al asignar y leer datos hacia y desde el disco.Ideología en torno al sistema de tipificación de la tríada de R:
El sistema de tipificación de pato de R tiene incertidumbre. Como analogía, considere una taza de cerámica, puede usarse para contener un líquido o usarse como un proyectil como una pelota de béisbol. El propósito de la taza depende de sus propiedades disponibles y de la función que actúa sobre ella. Esta fluidez de tipo permite a los programadores un mayor margen de maniobra para redirigir cualquier tipo de salida de una función a otra, y R hará todo lo posible para intentar leer tu mente y hacer algo razonable.
La idea es que cuando los programadores novatos escriben programas en R a través del movimiento browniano, como lo harán, intenten pasar un
googah.blimflarg
archivo avehicle.subspaceresponder(...)
. En lugar de vomitar un error de tipo, el programa R hace gimnasia para transformar el tipo y luego hacer algo sorprendentemente útil. El programador novato publica el código en su blog y dice: "¡Mira esta cosa tremenda que hice con 3 líneas de código R! ¡No tengo idea de cómo sabe qué hacer, pero lo hace!"fuente
Puede usar class (x) para verificar el tipo de variable. Si el requisito es verificar el tipo de todas las variables de un marco de datos, se puede usar sapply (x, class).
fuente
Intento
class
ytypeof
funciona, pero todo falla.fuente
Diseñado para hacer esencialmente lo contrario de lo que querías, aquí tienes uno de los juguetes de mi kit de herramientas:
fuente
lapply (your_dataframe, class) te da algo como:
$ tikr [1] "factor"
$ Fecha [1] "Fecha"
$ Abrir [1] "numérico"
$ Alto [1] "numérico"
... etc.
fuente