To zależy od tego, co chcesz zrobić. Domyślam się, że powyższy przykład to coś, co robisz właśnie jako przykład, ale możesz chcieć zrobić coś więcej niż drukować!
Aby uzyskać obiekt oparty na każdym elemencie środowiska, należy użyć eapply(env, function)
. Działa tak jak inne funkcje *apply()
. Zwraca listę, której obiektami są obiekty utworzone z funkcji przekazanej do eapply()
i których nazwy są kopiowane ze środowiska.
Na przykład, w konkretnym przypadku
map <- new.env(hash=T, parent=emptyenv())
assign('a', 1, map)
assign('b', 2, map)
eapply(map, identity)
zwraca listę tych dwóch elementów. Wygląda to trochę jak tabela mieszająca pokazująca, że można zaimplementować tablicę asocjacyjną jako listę zamiast środowiska (które jest trochę nieortodoksyjne, ale zdecydowanie interesujące).
Aby zobaczyć, jak to będzie działać przez jakiś nietrywialne, niestandardowych funkcji, tutaj jest przykładem
eapply(map, function(e) {
# e here stands for a copy of an element of the environment
e <- my.function(e)
my.other.function(e)
})
Jeśli zamiast tego chcesz zrobić coś dla każdego z elementów środowiska, bez powrotu obiekt listy na końcu, należy użyć pętli for jak @DWin w swojej odpowiedzi.
Martwię się jednak, że tak naprawdę nie będziesz chciał drukować, ale ostatecznie utworzysz obiekty oparte na elementach "tablicy mieszającej", a następnie wepchniesz je z powrotem na listę do dalszego przetwarzania. W takim przypadku powinieneś naprawdę użyć eapply()
. Kod będzie czystszy i będzie bardziej zgodny z idiomami R. Dba o iterację i tworzenie listy wyników dla ciebie.
'ls' zwraca nazwy, a nie obiekty. Spróbuj 'print (map [[v]]' –