2016-11-30 41 views
-3

被稱爲我有執行所需作業的R腳本/功能,也就是說,作爲保存ř腳本作爲對象,可以選自R

meansummary < -function(X)C(平均值=圓形簡單的東西( (x),6),se = round(sd(x)/(NROW(x) - sum(is.na(x))),6))

quantile3summary < -function avg = round(quantile(x,0.75),6),se = round(sd(x)/(NROW(x) - sum(is.na(x))),6))

quantile1summary < - 函數(x)c(avg = round(quantile(x,0.25),6),se = round(sd(x)/(NROW(x) - sum(is.na(x))),6))

我希望能夠將它保存到.RData或.RDS對象中,以便我可以從另一個R腳本加載它並能夠調用該函數。 目標是的代碼從實際腳本是要定期調用這一點,也保持隱藏的,因爲這是提供給客戶端分離。

到目前爲止,我能想到的,因爲我知道我們保存迴歸的輸出對象的對象,創建一個空的對象,並把所有的功能對象的功能和對象保存到一個RDS或Rdata對象/文件。並且想要定期運行此功能的腳本可以加載此對象並定期調用其功能。 如果有人能指導我使用這種方法或其他方法,那將非常有幫助。

感謝

+0

也許,那些壓低問題的人可以評論爲什麼這是一個愚蠢的問題。這將有助於未來。 – user2956863

+0

您是否考慮過在腳本中向客戶提供私有R包?如果該函數被加載到會話中,用戶總是會有某種方式看到它做了什麼 - 那麼爲什麼應該隱藏客戶端的代碼呢? – zacdav

回答

1

保存功能於一身的腳本,並使用source("functions.R")

+0

我想要原來的functions.R不透明的用戶,因爲我提供給客戶端。我想在C++環境中提供類似於dll/.so的提示。 – user2956863

1
fun_list = list(
    meansummary = meansummary, 
    quantile3summary = quantile3summary, 
    quantile1summary = quantile1summary 
) 

saveRDS(fun_list, "fun_list.RDS") 

# new session 
fun_list = readRDS("fun_list.RDS") 
list2env(fun_list, globalenv()) 

meansummary(1:5) 

但是這種方法並不能防止逆向工程代碼從另一個腳本調用。

+0

謝謝格雷戈裏。這正是我正在尋找的東西。不完美的解決方案對於不完美的環境來說已經足夠好了。我讚賞Greg和zacdav的評論。 – user2956863