2013-08-18 16 views
8

, eğer script.A ran:Bir R komut dosyasının yüklü bir pakette herhangi bir işlev kullandığını söylemenin kolay bir yolu var mı? Örneğin

library(ggplot2) 
a <- 12 

ve sonra script.B

library(ggplot2) 
b <- runif(100) 
qplot(b) 

Ben script.A aslında ggplot2 faydalanmak etmediğini söylemek mümkün olurdu, script.B yaptım oysa.

+0

İşlevlerin hangi paketten geldiğini bilmek istiyor musunuz? – Thomas

+0

Aslında yapmak istediğim, kullanılmayan paketleri elimine etmek. Eski projelerin kodlarını yeniden kullandığım için, paketlerimi her zaman ekliyorum (ama asla almayan), ve kullanılmayan paketleri bulmak için bir çeşit ikilik yapabilirim, bu bir güçlük olurdu. İdeal olarak, gerçekte aranan şeyin bir yürütme sonrası çöküşünü alabilirim. –

+1

Bu yardımlardan herhangi birini yapın: http://stackoverflow.com/questions/8761857/identifying-dependencies-of-r-functions-and-scripts ve http://stackoverflow.com/questions/17402735/between-function-possible -provizyon – Thomas

cevap

0

bu deneyin:

1) İlk sorun, DEĞİL yapmak her paket için bir library() çağrı için test etmek istiyorum. Bu durumda test etmek istediğimiz tek bir paket var, böylece bu adımı atlayabiliriz. library dışarı dummied ile

2) komut dosyasını çalıştırın: Eğer herhangi bir hata alırsanız o zaman komut dosyası paketine bağlı değildir

library <- list 
source("script.A") 
rm(library) # restore 

.

+1

Ben betik benim base :: library() 'koymak ettik :-) –

+1

Ad alanı ithalatı nedir? Bir şey başka bir yüklü pakete aktarıldığı için bir hatayla karşılaşmayabilirsiniz. Muhtemelen nadir, ama mümkün görünüyor. – Thomas

5

Kitaplığı normal olarak yükleyin ve tüm işlevleri paket ortamında (ve ad alanında) izleyin. Bunu yapmak için küçük bir yardımcı işlevi kullanacağız:

trap_funs <- function(env) 
{ 
    f <- sapply(as.list(env, all.names=TRUE), is.function) 
    for(n in names(f)[f]) trace(n, bquote(stop(paste("Script called function", .(n)))), where=env) 
} 

Örnek:

Bu ikinci açıklamada da tuzağa böyle data.table::xxx() olarak aramalar sağlamak için gereken
library(data.table) 
trap_funs(as.environment("package:data.table")) 
trap_funs(asNamespace("data.table")) 

.

Örnek: Kod kesildi bu

> as.data.table(mtcars) 
Tracing as.data.table(mtcars) on entry 
Error in eval(expr, envir, enclos) : Script called function as.data.table 

not edin.

İlgili konular