Gdy zapisujesz zmienną w pliku danych R za pomocą save
, jest ona zapisywana pod dowolną nazwą, jaką miała w sesji, w której została zapisana. Kiedy później idę załadować go z innej sesji, jest ładowany z tą samą nazwą, której skrypt ładujący prawdopodobnie nie może znać. Ta nazwa mogłaby zastąpić istniejącą zmienną o tej samej nazwie w sesji ładowania. Czy istnieje sposób na bezpieczne załadowanie obiektu z pliku danych do określonej nazwy zmiennej bez ryzyka przebicia istniejących zmiennych?
Przykład:
Zapisywanie sesji:
x = 5
save(x, file="x.Rda")
Sesja ładowania:
x = 7
load("x.Rda")
print(x) # This will print 5. Oops.
Jak chcę, żeby to działało:
x = 7
y = load_object_from_file("x.Rda")
print(x) # should print 7
print(y) # should print 5
r
variable-names
rdata
Ryan C. Thompson
źródło
źródło
saveRDS
ireadRDS
odpowiednio zapisuje i przywraca wszystkie atrybuty obiektu, w tym te utworzone przez aplikację (przezattr
)? Próbowałem zastosować to podejście zamiastsave
iload
, próbując znaleźć obejście mojego problemu. Jednak wydaje się, że tak nie jest, chyba że robię coś źle: stackoverflow.com/questions/23701195/… .Używam następujących:
źródło
Możesz utworzyć nowe środowisko, załadować plik .rda do tego środowiska i pobrać stamtąd obiekt. Jednak nakłada to pewne ograniczenia: albo znasz oryginalną nazwę obiektu, albo w pliku zapisany jest tylko jeden obiekt.
Ta funkcja zwraca obiekt załadowany z dostarczonego pliku .rda. Jeśli w pliku jest więcej niż jeden obiekt, zwracany jest dowolny.
źródło
new.env
naprawdę konieczne? Czy samo wywołanie funkcji nie zapewnia tymczasowego środowiska?Możesz też spróbować czegoś takiego:
źródło
Jeśli ktoś chce to zrobić za pomocą zwykłego pliku źródłowego, a nie zapisanego pliku Rdata / RDS / Rda, rozwiązanie jest bardzo podobne do tego dostarczonego przez @Hong Ooi
Wydruki:
Oraz w osobnym pliku źródłowym TestSourceFile.R
Ponownie, to rozwiązanie działa tylko wtedy, gdy istnieje dokładnie jeden plik, jeśli jest ich więcej, zwróci tylko jeden z nich (prawdopodobnie pierwszy, ale nie jest to gwarantowane).
źródło
Rozszerzam odpowiedź z @ricardo, aby umożliwić wybór określonej zmiennej, jeśli
.Rdata
plik zawiera wiele zmiennych (ponieważ moje kredyty są niskie, aby edytować odpowiedź). Dodaje kilka wierszy do odczytu danych wejściowych użytkownika po wyświetleniu zmiennych zawartych w.Rdata
pliku.źródło
Plik Rdata z jednym obiektem
źródło