使自訂函數可在公式中使用大家好,
有沒有辦法註冊包含函數的腳本以使它們可以在列公式中使用?
例如,如果編寫了一個帶有函數hex2binary({str}) 的腳本,該函數將十六進制數轉換為其二進制等效字串,並且我希望能夠在類似於內建函數之一的公式中調用此函數JSL公式,可以嗎?
謝謝
射線
回覆:使自訂函數可在公式中使用<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />看起來你已經在那裡了。 但是,對於另一個範例,您可以在下列位置對加載項進行反向工程:
https://community.jmp.com/docs/DOC-7528
回覆:使自訂函數可在公式中使用嗨 Ray3,傑夫,MS
前一段時間,但我實際上認為我知道如何做到這一點!
我還嘗試了 MS 描述的“包含”方法,它可以工作,但速度非常慢。
但是,我還可以透過使用我的函數建立加載項,然後透過以下方式從公式編輯器呼叫它來使加載項方法起作用:
全域:myfunc()
更具體地說,我創建了這個函數(它是基於 R 的,實際上只是返回參數的平方根,但我認為這裡並不重要:)
myRoot = 函數({x},
R 初始化();
R發送(x);
R 提交("
y <- sqrt(x)
”);
a = R 得到 (y);
R 項 ( );
返回(a);
);
然後我可以為新列新增這個公式:
全域:myRoot(:第 1 列)
乾杯,
埃斯本
使自訂函數可在公式中使用嗨,傑夫,女士,
感謝您的提示。我嘗試了這兩個建議:
使用 Local(Include()) 函數可以工作,但對於我的資料集(大約 20,000 行長)來說速度相當慢,因為每次計算公式時都會開啟包含的檔案。
我也嘗試了Jeff的建議,並將函數加入JMPStart.jsl中。該函數顯示在全域符號列表中,我可以在會話中從其他腳本呼叫它而不會出現問題。但是,如果我從列公式呼叫該函數,則會收到“名稱未解析”錯誤。為了讓列公式識別函數,我需要做一些特殊的事情嗎?
謝謝!
射線
使自訂函數可在公式中使用嗨雷,
無法讓函數顯示在公式編輯器的函數瀏覽器中,但可以透過雙擊公式元素並鍵入函數呼叫來在公式中使用使用者定義的函數。
為了確保您的函數在每個 JMP 會話中定義,您有幾個選項。
1) 您可以將函數宣告放在 JMPStart.JSL 檔案中。
2) 您可以製作一個沒有選單且除了聲明這些函數之外沒有其他功能的加載項。 只需將函數宣告放在 addinload.jsl 檔案中即可。 任何安裝了該插件的 JMP 副本都將具有這些功能。
我希望這有幫助。
-傑夫
使自訂函數可在公式中使用我不知道在列公式中全域註冊自訂函數的方法。 但是,有一種方法(可能不太方便)可以從已儲存的 jsl 檔案在本機上呼叫函數。
假設您儲存了一個僅包含此函數的腳本。 該檔案名為“plus_one”(或其他名稱)。
加一=功能({ X } , X + 1 ) ;
若要在列公式中呼叫此函數,請使用 local() 和 include() ,如下所示:
當地的(加一,
包括( “路徑/plus_one.jsl” ) ;
加一( :柱子) ;
)
其中,path 是已儲存的 jsl 檔案的路徑,:Column 是您套用公式的欄位。 Include() 解析並評估檔案中的 jsl 程式碼(但是檔案未開啟),如果沒有本機上下文,您將收到錯誤。
它並不美觀,但它可以工作,如果函數非常複雜並且經常重用,則可能很有用。
實際上,我只是想到應該可以將所有自訂公式收集在一個文件中,並使用啟動腳本來設定路徑變數。 那麼它們將更容易「全球」實施。 儲存函數中的任何變更都會轉換到所有資料表中,而無需編輯具有使用者定義函數的每一列。 我還沒有測試過這個想法,但這是一個有趣的前景。 不過,這可能是消耗記憶體的方法。