2016-02-18 26 views
7

ユーザーがR関数に渡してから、その関数に渡される任意のR接続(?connectionsの意味)から読み込めたいと思っています。 .Call経由のCコード。R:コンパイル済みコードの既存の接続から読む

ファイルR_ext/Connections.hのR APIは、最初の引数として構造体Rconnへのポインタをとり、必要な処理を実行する関数R_ReadConnectionを指定します。構造体自体もそのヘッダーで定義されていますが、APIの一部ではないgetConnection(C関数)以外に、その型の構造体を取得する方法はありません。私が知る限り、接続に関連付けられた外部ポインタも構造体を直接指しません。

したがって、適切なSEXPを関連するRconn構造体へのポインタに変換するサポートされた方法があるかどうか教えてください。

ありがとうございます。

答えて

1

機能R_GetConnection()documented in NEWSとして、R 3.3.0で追加されたR用API。 SEXPからRconn(a.k.a. Rconnection)へのポインタへの変換を実行します。したがって、このソリューションは現在

#include <R_ext/Connections.h> 

SEXP myfunction (SEXP conn_) 
{ 
    Rconnection conn = R_GetConnection(conn_); 
    // Do something with the connection 

    return R_NilValue; 
} 
+0

Rからこれを呼び出す正しい方法は何ですか?それは '.Call(" myfunction "、textConnection(LETTERS))ですか? – logworthy

+0

はい、うまくいくはずです。 –

1

(これは見落としであると思います)。この問題を回避するには、適切なプロトタイプを宣言して使用することであること

Rconnection getConnection(int n); 

SEXP connect_me(SEXP conn) { 
    getConnection(INTEGER(conn)[0]); 
    return R_NilValue; 
} 
+0

ありがとうございました。これは機能的には機能しますが、Rは非API呼び出しについて文句を言うので、このルートは公開されているパッケージのものです。 –

関連する問題