Tytuł jest samodzielnym pytaniem. Przykładem wyjaśnia to: RozważmyPrzypisywanie atrybutów listy w środowisku
x=list(a=1, b="name")
f <- function(){
assign('y[["d"]]', FALSE, parent.frame())
}
g <- function(y) {f(); print(y)}
g(x)
$a
[1] 1
$b
[1] "name"
natomiast chciałbym dostać
g(x)
$a
[1] 1
$b
[1] "name"
$d
[1] FALSE
kilka uwag. Wiedziałem, co jest nie tak w moim oryginalnym przykładzie, ale używam go do wyjaśnienia mojego celu. Chcę uniknąć < < - i chcę zmienić x w ramce nadrzędnej.
Myślę, że moje rozumienie otoczenia jest prymitywne i wszelkie odniesienia są doceniane.
Co chcesz zrobić? Modyfikacja zmiennych z zewnątrz obecny zakres jest ogólnie bardzo zły pomysł – hadley
Próbuję uniknąć przekazywanie przez wartość bardzo duży obiekt do funkcji, która jest wywoływana wielokrotnie.Funkcja również modyfikuje część obiektu.Za pomocą statycznych globals nie jest zalecane w dowolnym języku, ale czasem jest użyteczny – gappy
Czy profilowałeś omijanie obiektu i odkryłeś, że to problem? R nie będzie kopiować objektu Tak czy inaczej, chyba że ją zmodyfikujesz, i tak to robisz. Nie jest oczywiste, że to bardziej skomplikowane podejście pozwoli Ci zaoszczędzić czas. – hadley