簡體   English   中英

立即在R中顯示幫助(Rstudio)

[英]Displaying help in R immediately (Rstudio)

我正在R中創建一個程序包,它將通過tcltk程序包具有GUI界面。 前端函數將通過GUI從用戶那里獲取數據,並調用后端函數,該函數會將結果返回到前端。 我目前已經編寫了有關功能的所有文檔,除了這一部分和一些錯誤測試以外,這些功能也已完成。

為了幫助用戶,我希望能夠打印文檔。 在Rstudio中,它在幫助窗口中顯示它(必須注意,該窗口不是我的代碼通過tcltk包創建的,該窗口是Rstudio的一部分)。

如果我的功能僅通過命令行與用戶交互,則可以在Rstudio中獲得幫助屏幕以立即更新。 但是,如果我使用的是圖形,則在完成該功能之前,幫助窗口將不會更新,這違背了首先打印幫助屏幕的目的。

以下是通過tcltk軟件包創建的GUI窗口的示例。 我在這里使用var.test作為示例文檔,因此請確保您的幫助窗口位於其他位置,以查看幫助屏幕更新的時間。

require(tcltk)
print(help(var.test))

hi <- tktoplevel() #creates a window

ok <- function() # this function is called by pushing the button defined below
{
  print("Goodbye, World!")
  tkdestroy(hi)    # destroys the window
}

print("Hello, World!")

ok.button <- ttkbutton(hi, text = "This is a button", command = ok) #defines the button
tkgrid(ok.button) #puts the button on the window "hi"

tkfocus(hi)

tkwait.window(hi)

如您所見,即使在創建tcltk圖形窗口之前先調用幫助功能,也不會使幫助窗口更新。 打印功能似乎仍然有效,因為在按下按鈕之前就已經打印了“ Hello,World”。

為了使我的功能正常運行,必須使用tkwait.window(),否則前端將不會與后端同步。

如果真的不可能更新Rstudio窗口,則可以使用使用其他窗口或程序的替代解決方案。

嘗試打印幫助后,在代碼中添加一些延遲:

....
print(help(var.test))
# Sys.sleep(0.01)  # too short
Sys.sleep(0.5)   # long enough
...

這適用於Linux和Windows ...

我猜RStudio在執行R命令批處理(一次發送給R的所有命令)時不會更新GUI,因為它阻止更新在“阻塞子線程”中執行R,因此其行為類似於“單線程”,因此GUI在R批處理的執行結束之前無法更新。

sleep函數似乎將控件返回到RStudio(GUI?)進程,以便它可以更新GUI。

如果您減少太多的睡眠時間,則可以觀察到RStudio GUI的部分更新。

PS:使用process.events()不起作用!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM