2016-07-28 13 views
0

Gibt es eine Möglichkeit, alle in einem Quellskript erstellten, geänderten oder referenzierten Arbeitsbereichsobjekte zu identifizieren? Ich habe Hunderte von zufällig benannten Objekten an meinem Arbeitsplatz und bin "Putzhaus" - ich würde gerne in der Lage sein, in Zukunft proaktiver darüber zu sein und nur rm() am Ende aus dem Quelltext herauszuholen.R Identifizieren von in der Quelle verwendeten Workspace-Objekten

Antwort

0

Die einfachste Möglichkeit besteht darin, Ihre Umgebungsobjekte vor dem Sourcing, Sourcing und dann dem Vergleich der neuen Umgebungsobjekte mit der alten Liste in einer Liste zu speichern.

Hier ist ein Pseudo-Code.

old_objects <- ls() 
source(file) 
new_objects <- setdiff(ls(), c(old_objects, "old_objects")) 

Dies identifiziert die erstellten Objekte. Um festzustellen, ob ein Objekt geändert wurde, sehe ich keine andere Lösung, als alle Objekte zuvor in einer Liste zu speichern und anschließend identisch auszuführen.

# rm(list = ls(all = TRUE)) 
a <- 1 
b <- 1 

old_obj_names <- ls() 
old_objects <- lapply(old_obj_names, get) 
names(old_objects) <- old_obj_names 

# source should go here 
a <- 2 
c <- 3 

# I add "old_obj_names" and "old_objects" in the setdiff as these 
# were created after the call to ls but before the source 
new_objects <- setdiff(ls(), c(old_obj_names, "old_obj_names", "old_objects")) 
modified_objects <- sapply(old_obj_names, function(x) !identical(old_objects[[x]], get(x)), 
          USE.NAMES = TRUE) 
modified_objects <- names(modified_objects[modified_objects]) 

new_objects ist in der Tat "c" und modified_objects ist in der Tat "a" in diesem Beispiel. Damit dies funktioniert, müssen Sie sicherstellen, dass weder old_objects noch old_obj_names in der Quelldatei erstellt oder geändert werden!

+0

In Ihren Aufrufen von 'ls' können Sie' all = TRUE' angeben, um alle versteckten Objekte zu erhalten. – Choubi