2016-03-09 121 views
2

在Python可以寫出如何確定哪個R包包含一個函數?

import numpy as np 
print np.random.randn(10) 

做出明確規定的功能random.randn來自numpy的。

當我從網上下載一個R代碼,比如下面的代碼時,我想知道哪些函數是從每個庫中導入的。有沒有辦法做到這一點,而不是評論每個「庫」聲明並查看代碼破壞的位置?

library(pracma) 
library(quantmod) 
library(fractaldim) 

calculate_EI <- function(fxdata){ 

colnames(fxdata) <- c("data") 

approx_entropy_for_symbol <- approx_entropy(fxdata, edim = 2, r = 0.2*sd(fxdata), elag = 1) 
random_dist <- rnorm(length(fxdata)) 
approx_entropy_threshold <- approx_entropy(random_dist, edim = 2, r= 0.2*sd(random_dist), elag = 1) 

fractal_dimension_for_symbol <- fd.estimate(as.data.frame(fxdata$data)$data)$fd 
hurst_exponent_for_symbol <- hurstexp(as.data.frame(fxdata$data)$data, d = 50)$Hal 

EI$value <- ((approx_entropy_for_symbol-approx_entropy_threshold)/approx_entropy_threshold)^2 
EI$approx_entropy_contribution <- ((approx_entropy_for_symbol-approx_entropy_threshold)/approx_entropy_threshold)^2 
EI$value <- EI$value + ((fractal_dimension_for_symbol-1.5))^2 
EI$fractal_dimension_contribution <- ((fractal_dimension_for_symbol-1.5))^2 
EI$value <- EI$value + ((hurst_exponent_for_symbol-0.5))^2 
EI$hurst_exponent_contribution <- ((hurst_exponent_for_symbol-0.5))^2 
EI$value <- sqrt(EI$value) 

return(EI) 
} 

#sample case 
getSymbols("EUR/USD",src="oanda") 
fxdata <- EURUSD 
EI <- calculate_EI(fxdata) 
EI 
+1

在函數的文檔中是函數所在的包的名稱,例如, 'help()'來自包{utils}。 – jogo

回答

5

有尋找像getAnywhere對象和包sos如果你沒有你的搜索路徑上的軟件包一些有用的功能。此外,可以使用解析數據嘗試以編程方式執行它,但不會得到所有內容,例如在函數以字符串或其他奇怪的情況傳遞的情況下。無論如何,如果您將代碼存儲在「test.R」中(如@javK所述,包需要加載以便getAnywhere可以在此示例中找到它們),則以下是一個簡單示例。

src <- parse(file="test.R", keep.source = TRUE) 
tokens <- getParseData(src) 
funs <- tokens[tokens$token == "SYMBOL_FUNCTION_CALL",] 
res <- lapply(funs$text, function(x) getAnywhere(x)$where) 

## Return a list of the functions along with the environment they in 
## truncated... 
setNames(res, funs$text) 
# ... 
# $c 
# [1] "package:base" "namespace:base" 
# $approx_entropy 
# [1] "package:pracma" "namespace:pracma" 
# $sd 
# [1] "package:stats" "namespace:stats" 
# $rnorm 
# [1] "package:stats" "namespace:stats" 
# ... 
+0

請注意,應該首先加載適當的軟件包才能工作。否則它不會找到它們。 – Jav

+0

謝謝,接受答案。我可以修改腳本,使其不顯示來自軟件包的函數:base或package:stats。 – Fortranner

相關問題