¿Recorrer ls() u objetos()?
(5)
¿Hay alguna forma de que pueda recorrer un conjunto de objetos y aplicar una función a cada uno?
Cuando ls()
u objects()
, devuelve una lista de nombres de objetos. Me gustaría recorrer esta lista, identificar aquellos que son data.frame
y luego ejecutar una función contra cada objeto.
¿Cómo paso una entrada de ls
u objects
través de una función?
Disculpas si esto parece una pregunta tonta ...
La respuesta dada por @jverzani acerca de averiguar qué objetos son marcos de datos es buena. Así que vamos a empezar con eso. Pero queremos seleccionar solo los elementos que son data.frames. Así podríamos hacerlo de esta manera:
#test data
df <- data.frame(a=1:10, b=11:20)
df2 <- data.frame(a=2:4, b=4:6)
notDf <- 1
dfs <- ls()[sapply(mget(ls(), .GlobalEnv), is.data.frame)]
los nombres de los marcos de datos ahora son cadenas en el objeto dfs, de modo que puede pasarlos a otras funciones de la siguiente manera:
sapply( dfs, function(x) str( get( x ) ) )
Utilicé el comando get()
para obtener realmente el objeto por su nombre (consulte la sección R Preguntas frecuentes para obtener más información al respecto)
He respondido a su pregunta anterior, pero tengo la sospecha de que si organiza sus marcos de datos en elementos de la lista, su código será MUCHO más legible y fácil de mantener. Obviamente, no puedo decir esto con certeza, pero no puedo encontrar un caso de uso donde la iteración de todos los objetos en busca de marcos de datos sea superior a mantener sus marcos de datos en una lista y luego llamar a cada elemento de esa lista.
Lanzando otra solución a la mezcla usando inherits
. Básicamente (a) obtiene todos los objetos del entorno actual y (b) verifica si se heredan de un marco de datos.
sapply(sapply(ls(), get), inherits, ''data.frame'')
Puede obtener un objeto de su nombre con get o mget e iterar con una de las funciones de tipo de aplicación. Por ejemplo,
sapply(mget(ls(), .GlobalEnv), is.data.frame)
le dirá qué elementos en el entorno global son marcos de datos. Para usar dentro de una función, puede especificar un entorno para la llamada ls.
Puede recorrer los objetos en el entorno usando "eapply".
Puede usar la función get()
para referirse a un objeto por su nombre
# Create some objects
df <- data.frame(a=1:10)
dl <- list(a=1, b=2, c=3)
# Use `ls()` to return a list of object names
lso <- ls()
# Use `get()` to refer to specific objects
class(get(lso[1]))
[1] "data.frame"
# Using an apply function to evaluate the class
lapply(lso, function(x) class(get(x)))
[[1]]
[1] "data.frame"
[[2]]
[1] "list"