14

Mac と Ubuntu の両方で多くのオプションを試しました。Rserve のドキュメントを読みました

http://rforge.net/Rserve/doc.html

Rserve および RSclient パッケージの場合:

http://cran.r-project.org/web/packages/RSclient/RSclient.pdf

http://cran.r-project.org/web/packages/Rserve/Rserve.pdf

Rserve 内で接続を開いたり閉じたりするための正しいワークフローと、Rserve を「正常に」シャットダウンするための正しいワークフローを理解できません。

たとえば、Ubuntu では、./config --enable-R-shlib を使用してソースから R をインストールし (Rserve のドキュメントに従って)、/etc/Rserve.conf に「control enable」行も追加しました。

Ubuntu ターミナルで:

library(Rserve)
library(RSclient)
Rserve()
c<-RS.connect()
c ## this is an Rserve QAP1 connection

## Trying to shutdown the server
RSshutdown(c) 
Error in writeBin(as.integer....): invalid connection

RS.server.shutdown(c)
Error in RS.server.shutdown(c): command failed with satus code 0x4e: no control line present   (control commands disabled or server shutdown)

I can, however, CLOSE the connection:

RS.close(c)
>NULL
c ## Closed Rserve connection

After closing the connection, I also tried the options (also tried with argument 'c', even though the connection is closed):

RS.server.shutdown()
RSshutdown()

So, my questions are:

1- How can I close Rserve gracefully?

2- Can Rserve be used without RSclient?

I also looked at

How to Shutdown Rserve(), running in DEBUG

but the question refers to the debug mode and is also unresolved. (I don't have enough reputation to comment/ask whether the shutdown works in the non-debug mode).

Also looked at:

how to connect to Rserve with an R client

Thanks so much!

4

3 に答える 3

17

Rserve および RSclient パッケージをロードしてから、インスタンスに接続します。

> library(Rserve)
> library(RSclient)

> Rserve(port = 6311, debug = FALSE)
> Rserve(port = 6312, debug = TRUE)

Starting Rserve...
 "C:\..\Rserve.exe" --RS-port 6311
Starting Rserve...
 "C:\..\Rserve_d.exe" --RS-port 6312 

> rsc <- RSconnect(port = 6311)
> rscd <- RSconnect(port = 6312)

彼らは走っているように見えます...

> system('tasklist /FI "IMAGENAME eq Rserve.exe"')
> system('tasklist /FI "IMAGENAME eq Rserve_d.exe"')

Image Name                     PID Session Name        Session#    Mem Usage
========================= ======== ================ =========== ============
Rserve.exe                    8600 Console                    1     39,312 K
Rserve_d.exe                 12652 Console                    1     39,324 K

シャットダウンしましょう。

> RSshutdown(rsc)
> RSshutdown(rscd)

そして彼らはいなくなった...

> system('tasklist /FI "IMAGENAME eq Rserve.exe"')
> system('tasklist /FI "IMAGENAME eq Rserve_d.exe"')

INFO: No tasks are running which match the specified criteria.

Rserve は、引数や構成スクリプトで開始することにより、RSclient なしで使用できます。次に、他のプログラム (Tableau など) から、または独自のコードを使用して接続できます。RSclient は、R のインスタンスからコマンド/データを Rserve に渡す方法を提供します。

お役に立てれば :)

于 2014-10-14T20:18:06.977 に答える
5

Windows システムでは、RServeインスタンスを閉じる場合は、system関数を使用しRて閉じることができます。たとえば、R次のようになります。

library(Rserve)
Rserve() # run without any arguments or ports specified
system('tasklist /FI "IMAGENAME eq Rserve.exe"') # run this to see RServe instances and their PIDs
system('TASKKILL /PID {yourPID} /F') # run this to kill off the RServe instance with your selected PID

その PID で RServe インスタンスを正しく閉じると、次のメッセージが表示されます。

成功: PID xxxx のプロセスは終了しました。

次のように入力して、RServe インスタンスが閉じられたことを確認できます。

system('tasklist /FI "IMAGENAME eq Rserve.exe"')

また。RServe インスタンスが実行されていない場合は、次のメッセージが表示されます。

情報: 指定された条件に一致するタスクは実行されていません。

このトピックに関するヘルプと情報については、この関連する質問を参照してください。

以前の回答で言及された「RSClient」アプローチは、これよりも整頓されていて簡単であることに注意してくださいRServe

于 2016-02-11T11:32:43.440 に答える