Depende de lo que quieras hacer. Supongo que su ejemplo print
anterior es algo que está haciendo solo como ejemplo, pero que quizás desee hacer algo más que imprimir.
Si desea obtener un objeto basado en cada elemento de un entorno, utilice eapply(env, function)
. Funciona como las otras funciones *apply()
. Devuelve una lista cuyos objetos son los objetos que creó a partir de la función que se pasó al eapply()
y cuyos nombres se copian del entorno.
Por ejemplo, en el caso específico
map <- new.env(hash=T, parent=emptyenv())
assign('a', 1, map)
assign('b', 2, map)
eapply(map, identity)
devuelve una lista de los dos elementos. Se parece mucho a una tabla hash que muestra que se puede implementar una tabla hash como una lista en lugar de un entorno (que es un poco heterodoxo, pero definitivamente interesante).
Para ver cómo podría funcionar para alguna función no trivial, de encargo, aquí es un ejemplo
eapply(map, function(e) {
# e here stands for a copy of an element of the environment
e <- my.function(e)
my.other.function(e)
})
Si por el contrario quiere hacer algo para cada uno de los elementos de un entorno, sin volver un objeto de lista al final, debe usar un bucle for como @DWin lo hizo en su respuesta.
Mi preocupación, sin embargo, es que no querrá simplemente imprimir sino que eventualmente creará objetos basados en los elementos de su "tabla hash" y los volverá a meter en una lista para su posterior procesamiento. En ese caso, realmente debería usar eapply()
. El código será más limpio y se apegará más a los modismos de R. Se encarga de iterar y crear la lista de resultados para usted.
'ls' devuelve nombres, no objetos. Pruebe 'print (map [[v]]' –