腳本一直有效,直到它被加載項調用!<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />你好,
我有一個腳本,它從用戶界面獲取數據,在 JMP 中運行擬合,並生成包含原始數據、一些計算數據和各種圖表以及從 JMP 輸出中選擇的信息的報告。
從腳本運行時效果很好,即使加密後也是如此。
然而,一旦我將加密文件粘貼到一個只有這個腳本的簡單插件中,一切正常,除了它不再顯示我從 JMP 輸出中提取的擬合方程。
我很困惑!
更令人費解的是,只要我在使用插件之前從腳本窗口運行一次腳本,JMP 就可以完美地從插件中運行。 就好像它現在記得要做什麼一樣!
腳本在這裡得到等式:
nlr = nlModel << 報告;
pb = nlr[PictBox(1)];
modEq = pb << 獲取圖像;
然後使用以下方式顯示它:
V 列錶框(
Text Box("模型方程", << 設置字體大小 (12)),
圖片框(modEq),
文本框(” ”),
知道為什麼這個位在集成到插件後就停止工作了嗎?
我附上了從腳本窗口運行的輸出與從插件運行的輸出的屏幕轉儲(在打開 JMP 後立即運行)
謝謝
回复:腳本一直有效,直到它被加載項調用!我懷疑保存公式的 PictBox 確實需要出現在屏幕上才能實際創建您要捕獲的位圖。最好在它可見時捕捉它。
您可以對數據表使用“隱藏”而不是“私有”。隱藏的表有一個隱藏的窗口。私人餐桌沒有窗戶。私有表需要在您仍有指向它們的變量時關閉(或者它們累積直到 JMP 關閉,耗盡內存)。隱藏的表不太容易丟失。
回复:腳本一直有效,直到它被加載項調用!為了能夠運行我的驗證測試,我不得不使用一種難看的解決方法:就在調用非線性 JMP 分析之前,我打開了一個空窗口,並在腳本結束時將其關閉。
有用。 我希望 show then hide log 也能正常工作。
我很想知道為什麼要這樣做!
回复:腳本一直有效,直到它被加載項調用!嗨克雷奇,
太... 我嘗試使用 newimage 函數(我不知道的好函數)但仍然沒有成功。
我嘗試在報表平台提取時添加:
nlr = nlModel << 報告;
pb = nlr[PictBox(1)];
//modEq = pb << 獲取圖像;
//這裡:modEq = pb << 獲取圖像;
modEq = pb << 獲取圖像;
modEq = NewImage(modEq);
我也在自己的報告窗口中嘗試過:
V 列錶框(
Text Box("模型方程", << 設置字體大小 (12)),
圖片框(新圖像(modEq)),
我在這兩個地方都試過了!
有一點不同:背景 JMP 報告仍然顯示一個十字,但我的報告什麼也沒有顯示,甚至沒有空白。
然而,回過頭來看腳本,運行的越來越少,我意識到它實際上失敗的地方在這裡:
// 數據分析
win3 = New Window( "非線性模型報告",
nlModel = dt << 非線性(
Y( :姓名( "hGH" ) ),
X( :Name( "模型增長" ) ),
二階導數法( 1 ),
牛頓,
結束,
置信限度,
顯示預測表達式( 1 )
)
);
win3 被腳本關閉,取而代之的是我自己的報告窗口,其中包含科學家要求我提供的所有內容。 所以出於某種原因,如果 JMP 中除了主窗口之外沒有打開任何窗口,顯示預測方程指令將失敗! 此線程中建議的所有技巧都與執行 NLR 後完成的操作有關,因此它們不會影響結果。
幾個月前我在編寫插件時從未發現此錯誤的原因是因為我打開了每日提示窗口。 它一定足以讓插件工作:任何打開的 JMP 窗口似乎都可以解決問題。
對於背景:hGH 是響應,值由用戶進一步輸入,模型增長是使用難以捉摸的模型方程作為公式的列,它需要時間並模擬將與實際增長相匹配的“預期增長”。
所以問題是,當沒有打開其他 jmp 窗口時,非線性函數不會在我的腳本中調用它的地方顯示 pred 方程。
我之前創建了一個表:
dt = 新表("數據",
私人的,
添加行( 6 ),
新列(“時間”,數字,設置值(lstTimes)),
新列(“hGH”,數字,設置值(lsthGH))
);
我取消了私人指導,當然現在插件可以工作了。
但我使用 private 的原因是因為這是我的輸出工作的唯一方式。 如果我嘗試在最後關閉數據表,即使等待,也不會生成報告。
無論如何,這不是一個合適的解決方案,但如果有一種方法可以在生成報告時打開數據表,這樣就不會出現故障,然後在腳本失敗的情況下關閉數據表,我會接受的。
我想知道它是否適用於 JMP 13,它是否是一個錯誤,或者我編寫腳本的方式是否真的存在錯誤......
回复:腳本一直有效,直到它被加載項調用!嘗試這個:
圖片框(新圖片(模型均衡器))
我認為紅色 X 表示圖片框已連接到圖像的原始數據並且該數據不再存在.通過克隆圖像(使用 newImage),我認為 pict 框將擁有自己的私有副本。
您也許還可以省略圖片框功能:
V 列錶框(
Text Box("模型方程", << 設置字體大小 (12)),
modEq, // 我認為圖像可以在沒有 PictureBox 函數的情況下工作,但它可能仍然需要 newImage
文本框(” ”),
回复:腳本一直有效,直到它被加載項調用!你好,
我現在嘗試了幾種不同的場景。
筆記
- 插件和腳本都使用名稱默認為此處子句(主要是為了防止人們同時將 JMP 用於其他用途)
- 我想從 JMP 報告導入到我的方程式是來自表中一列的自定義方程式,它使用要填充的公式,我打開了顯示預測表達式( 1個)
- 在樹結構中,這顯示為 pictbox,因為 craige 說,因為 JMP 中的方程是圖片而不是文本。 所以在我的新劇本中,我採納了 Eric 的建議,現在
近紅外線=模型<<報告;
鉛=近紅外線[圖片框( 1個)] ;
模型均衡器=鉛<<獲取圖像;
結核病=近紅外線[表格框( 5個)] ;
表值=結核病<<製作成數據表;
- 它還會得到一個由幾個位組成的圖形,這些位聚集在一個圖片框中:
bb =近紅外線[圖片框( 1個)] ;
陰謀= bb <<獲取圖片;
它在我自己的報告中顯示那些沒有任何問題的。
場景:
- 每次都從腳本工作
- 在腳本打開時從插件工作,即使它沒有運行
- 如果插件被第二次調用並且報告沒有關閉(沒有顯示方程的報告),則工作
- 第一次從插件調用時或報告窗口已關閉時的任何時候都不起作用
- 如果打開日誌則有效
- 即使事先關閉了日誌和報告窗口,也可以在日誌打開後工作
- 只要打開任何 JMP 窗口(JMP 插件編輯窗口/任何數據表/腳本窗口)即可工作,但一旦關閉,它就不再工作
看起來我的插件需要一個朋友才能工作
從圖片中可以看出,它顯示了一個十字。 我還應該說,當腳本運行時,JMP 打開它自己的報告窗口和我編寫腳本以運行非線性擬合的表。 那些在背景中打開和關閉,因為我想不出一種讓它們完全不可見的方法。 發生這種情況時,我瞥見 JMP 分析報告也有一個十字而不是預測方程。
如果這是給我的,我不介意,但我必須驗證它是否可以用於 cGMP,我不能很好地告訴人們每次運行兩次以獲得正確的格式!
我在這裡不知所措...
還有什麼想法嗎?
回复:腳本一直有效,直到它被加載項調用!PictBox 和 PictureBox 是兩個不同的框。在內部,JMP 使用 PictureBox 作為顯示框樹中的標記。該標記以多種方式使用,以幫助確定何時應將子框分組為一個塊。平台通常圍繞圖形及其軸放置 PictureBox。這就是樹中您經常想要“拍照”的點。
PictBox 是一個包含位圖圖片的框。
不幸的是,圖片框()功能創建一個 PictBox。沒有用於創建 PictureBox 的 JSL 函數,但平台會創建它們。
除非您要將圖像添加到報告中,否則您可能找不到 PictBox。如果有圖表,您可能會找到 PictureBox。
回复:腳本一直有效,直到它被加載項調用!您好 Hardner,非常感謝您的評論。
也感謝您提供故障排除提示。 幾個月前,當我最初寫這篇文章時,th 中的數字樹結構不匹配,我最終不得不猜測。 我忘記了這件事。 這真的很奇怪:樹結構會顯示數字框 18,但要將其取出並顯示在我的報告窗口中,我必須調用數字框 7,例如!!!
插件將始終執行相同的分析,因此在這方面沒有問題。
回复:腳本一直有效,直到它被加載項調用!嗨,埃里克,感謝您的回答。
當我走開思考時,我也想起了範圍問題,意識到那一定是個問題。
我嘗試了您的兩種解決方案,但都沒有用……第一次。
但是現在,如果我連續兩次運行插件,預測方程將顯示在我的第二個報告輸出中。 當我不在兩次會議之間時,我會再試一次!
有趣的是,這個特定的圖片框如何給我帶來問題,而我從 jmp 報告中得到的其他位也得到了正確顯示。
在這裡好好學習!
再次感謝 :)
回复:腳本一直有效,直到它被加載項調用!同意這看起來像是范圍界定。
但是,可能無關,我也很驚訝這對你有用: pb = nlr[PictBox(1)];
如果我不拼出 [PictureBox(1)] 我會收到錯誤消息。想知道這是否是 JMP 版本的問題。
我還打算建議你可以添加
nlr<
同樣可能與這個緊迫的問題無關,但我建議如果您的插件每次都將提取不同的數據(或者被其他人使用可能有其他偏好),您要確保該框將始終存在並且始終是 PictureBox (1). 你可能想尋找更多具體來說基於它所在的大綱框名稱或測試查找它。也許您已經在做後者,因為您的腳本不會失敗但會繼續生成報告。我在 PictBox 上看到的失敗會停止整個腳本,它不會繼續使用空白。
回复:腳本一直有效,直到它被加載項調用!嘿,格溫尼卡特,
JMP 日誌中是否有任何消息?
這種類型的大多數問題往往歸結為變量作用域。您的加載項很可能與名稱默認為此處(1) ,但是當您在加載項的上下文之外運行腳本時,腳本可能在沒有它的情況下運行。因此,在加載項上下文之外,您的變量都是全局變量,但在加載項上下文中,它們被添加到這裡命名空間代替。所以我認為模型均衡器在插件版本中無法找到 V 列錶框內部。當您在加載項外部運行腳本時它起作用的事實首先支持了這一理論,因為這樣做會模型均衡器進入全局命名空間,允許加載項腳本找到它。
嘗試更改這兩行:
modEq = pb << 獲取圖像;
圖片框(modEq),
到
::模態方程= pb << 獲取圖像;
圖片框( ::模態方程),
看看這是否效果更好。這保證了模型均衡器被放入全局命名空間。或者,如果您想將其保存在這裡命名空間(可能是更好的做法),而是這樣做:
這裡:modEq = pb << 獲取圖像;
圖片框(這裡:modEq ),
讓我知道是否可以解決問題。
謝謝,
埃里克