3

技術者以外のユーザーが統計モデルにアクセスできるようにするRベースのGUIがあります。現状では、ユーザーは最初にRをロードしてからloadGui()、コマンドラインで入力する必要があります。

これはそれほど難しいことではありませんが、技術者以外の人にコマンドラインで何かを入力させるのは好きではありません。R GUIを起動し、そのコマンドを自動実行する.batファイル(ユーザーはすべてWindowsを実行していますが、マルチプラットフォームソリューションも高く評価されています)を作成するというアイデアがありました。

私の最初の問題は、コマンドラインからRGuiを開くことです。次のような明示的なパスを提供できますが

"%ProgramW6432%\R\R-2.15.1\bin\i386\Rgui.exe"

Rがアップグレードされるたびに更新する必要があります。環境変数からRGuiの場所を取得する方がよいでしょうが%path%、それを解析する簡単な方法がわかりません。

2番目の大きな問題は、コマンドラインからの起動時にRのコマンドを呼び出す方法です。私の最初の考えは、のコピーを取り~/.Rprofile、追加のコマンドを追加し、Rがロードされたらファイルの元のコピーを置き換えることができるということです。しかし、これはひどく厄介なので、別の方法が欲しいです。

Rをバッチモードで実行することはできません。第一に、GUIに表示を促すことができないためです。第二に、ユーザーが使用する必要がない場合でも、Rコンソールを使用できるようにしたいためです。

おもちゃのGUIでアイデアをテストしたい場合は、次のことを試してください。

loadGui <- function()
{
  library(gWidgetstclck)
  win <- gwindow("test")
  rad <- gradio(letters[1:3], cont = win)
}
4

4 に答える 4

4

問題1:Windowsの推奨されるデフォルトのディレクトリにインストールするのではなく、グループRといくつかの関連するものを、たとえばR自体をインストールする場所にインストールして、パスが一定に保たれるようにします。アップグレード時に、最初にに名前を変更してから、新しいにインストールします。c:/opt/c:/opt/R-currentc:/opt/R-current/binR-previousR-current

問題2:私はそれを何ヶ月も前にスクリプトで解決したと思います。これで、これらを起動するために使用できRscript.exeます。プロンプトを待機するためのtcltkの例があります。

于 2012-07-19T17:11:50.327 に答える
2

私は同じようなことを数回しました。私の場合、クライアントはWindowsを使用していたので、Rをコンピューターにインストールし、デスクトップにRを実行するためのショートカットを作成しました。次に、ショートカットを右クリックし、プロパティを選択して、プロパティダイアログを表示します。次に、「Start in」フォルダーを、実行したいフォルダーに変更しました(.Rdataファイルに正しいデータが含まれ、.Rdataファイルに.First関数またはフォルダーに.Rprofileが含まれていました)。メインのRウィンドウを最小化して実行するための「最小化」オプションを持つ「実行:」オプションもあります。

実行したい関数(通常はtcltkを使用した特殊なGUI)と必要なデータを作成し、それらを.Rdataファイルに保存し、GUIを表示するコマンドを実行するために.Firstまたは.Rprofileを作成しました。ユーザーがデスクトップ上のアイコンをダブルクリックすると、他の部分を無視して操作できるGUIがポップアップ表示されます。

于 2012-07-19T18:37:42.163 に答える
1

ProjectTemplateライブラリを見てください。それはあなたがやりたいことをします。使用済みライブラリをバッチファイルからロードし、ロード後にRファイルを自動的に実行するだけでなく、他の多くの便利なものもロードします...

于 2012-07-19T17:31:40.530 に答える
0

https://stackoverflow.com/a/27350487/41338からの回答と、上記のRichie Cottonからのコメントを使用して、ウィンドウへのポインターが有効。

以下を使用して作成および表示されたRGtk2ウィンドウの場合:

library(RGtk2)
mainWindow <- gtkWindow("toplevel", show = TRUE)

それへのポインタが存在するかどうかをチェックする関数を作成します。

isnull <- function(pointer){
  a <- attributes(pointer)
  attributes(pointer) <- NULL
  out <- identical(pointer, new("externalptr"))
  attributes(pointer) <- a
  return(out)
}

スクリプトの最後に:

while(!isnull(mainWindow)) Sys.sleep(1)
于 2021-08-09T13:30:46.400 に答える