2016-07-28 6 views
0

ソーススクリプトで作成、変更、または参照されるすべてのワークスペースオブジェクトを識別する方法はありますか?私は職場で無作為に名付けられた何百ものオブジェクトを持っていて、「家を掃除しています」 - これについてもっと積極的にしたいと思っています。Rソースで使用されるワークスペースオブジェクトを識別する

答えて

0

最も単純な方法は、環境オブジェクトをソーシング、ソーシングしてから、古い環境オブジェクトと古いリストを比較する前に、リストに環境オブジェクトを格納することです。

ここにいくつかの疑似コードがあります。

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

これにより、作成されたオブジェクトが識別されます。オブジェクトが変更されたかどうかを特定するために、リストにすべてのオブジェクトをあらかじめ格納しておいてから、それ以降同じものを実行するという方法以外の解決策はありません。

# 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は確かに "C" であるとmodified_objectsは "" この例では確かにあります。明らかに、これが機能するには、old_objectsold_obj_namesも、ソースファイルで作成または変更されていないことを確認する必要があります。

+0

'ls'の呼び出しで、' all = TRUE'を指定すると、すべての隠しオブジェクトも取得できます。 – Choubi

関連する問題