2013-06-04 59 views
1

假設我有一個具有多個返回值的函數(如下所示)。但是,由於用戶不知道每個值的含義,除非他們查找函數定義,否則此輸出不會提供信息。因此,我想用println()將適當名稱的結果打印到屏幕上,同時抑制屏幕上打印的實際返回值。在R中,函數invisible()這樣做,但你如何在Julia中做同樣的事情?如何抑制函數返回

function trimci(x::Array; tr=0.2, alpha=0.05, nullvalue=0) 
    se=sqrt(winvar(x,tr=tr))./((1-2.*tr)*sqrt(length(x))) 
    ci=cell(2) 
    df=length(x)-2.*floor(tr.*length(x))-1 
    ci=[tmean(x, tr=tr)-qt(1-alpha./2, df).*se, tmean(x, tr=tr)+qt(1-alpha./2, df).*se] 
    test=(tmean(x,tr=tr)-nullvalue)./se 
    sig=2.*(1-pt(abs(test),df)) 
    return ci, tmean(x, tr=tr), test, se, sig 
end 

回答

3

除了Harlan和Stefan說的之外,讓我分享一個來自ODBC.jl包(source here)的示例。 Julia與其他語言相比,我最喜歡的功能之一就是創建自定義類型的簡單方法(也沒有性能問題!)。這是一個自定義類型,元數據,它只是保存描述執行查詢的數據的幾個字段。這並不一定需要它自己的類型,但它使得在函數之間傳遞所有這些數據更方便,並允許通過重載Base.show()函數來自定義格式化輸出。

type Metadata 
    querystring::String 
    cols::Int 
    rows::Int 
    colnames::Array{ASCIIString} 
    coltypes::Array{(String,Int16)} 
    colsizes::Array{Int} 
    coldigits::Array{Int16} 
    colnulls::Array{Int16} 
end 
function show(io::IO,meta::Metadata) 
    if meta == null_meta 
     print(io,"No metadata") 
    else 
     println(io,"Resultset metadata for executed query") 
     println(io,"------------------------------------") 
     println(io,"Columns: $(meta.cols)") 
     println(io,"Rows: $(meta.rows)") 
     println(io,"Column Names: $(meta.colnames)") 
     println(io,"Column Types: $(meta.coltypes)") 
     println(io,"Column Sizes: $(meta.colsizes)") 
     println(io,"Column Digits: $(meta.coldigits)") 
     println(io,"Column Nullable: $(meta.colnulls)") 
     print(io,"Query: $(meta.querystring)") 
    end 
end 

再次,沒有什麼幻想,但說明了定義自定義類型和生成自定義輸出的真正容易程度。

乾杯。

2

有一兩件事你可以做的是定義返回值的一種新型的這個功能,把它TrimCIResult什麼的。然後你可以定義合適的方法在REPL中顯示該對象。或者,您可以將該解決方案推廣爲可用於存儲和顯示任何統計測試結果的類型層次結構。

0

nothing是您如何返回不會打印的值:repl專門檢查值nothing,如果這是表達式返回的值,則不打印任何內容。你想要做的是返回一堆價值而不打印它們,這讓我覺得很奇怪。如果一個函數返回一些東西,我想知道它 - 讓用戶看到repl謊言似乎是一個壞主意。然而,Harlan的建議仍然有效:使用您不希望作爲字段向用戶公開的值定義此值的類型,並自定義其打印,以便不打印您不想顯示的人的字段。

+0

我不認爲我的原始文章很清晰。我的意思是更好的格式並將其他信息添加到輸出中。例如,上面的函數輸出一個修剪的基於平均值的置信區間,修剪的樣本均值等。我希望輸出顯示類似於「CI:123,234; trimmed mean:100; test_statistic:4.323; p = 0.000123」的內容。我基本上需要的輸出是更多的信息。如果我先打印這些值,然後返回所有的值,我將在屏幕上打印兩次值。 – Alex