2012-02-09 14 views
6

私はこれに関するドキュメントを見つけることができませんでした。 RソースコードがNewEnvironmentR_NewHashedEnvを使用しているようですが、どちらもパブリックヘッダーにありませんので、ユーザーとして利用できないようです。新しいENVSXPを生成するためにどのような機能(またはどのコード行)を使用する必要がありますか?Cから新しいR環境を作成するにはどうすればよいですか?

+0

あなたがC++を可能にした場合、私はRcpp経由でそれを行う方法をお見せすることができます。 –

答えて

3

あなたはallocSExpをしたい:

/* C code in foo.c */ 
#include "Rinternals.h" 
SEXP foo() { 
    SEXP res = allocSExp(ENVSXP); 
    return res; 
} 

> # R code (after running R CMD SHLIB foo.c) 
> dyn.load("foo.dll") 
> .Call("foo") 
<environment: 0x016a4084> 
+1

[inline](http://cran.r-project.org/package=inline)を使用して1本または2本のライナーを使用してみませんか?また、あなたは割り当て、あなたは保護/保護を解除する必要はありませんか? –

+0

@DirkEddelbuettel:悲しいことに、私はインラインで習慣的に使用していません(私にとってはF-)。この単純な例では、割り当て後にマクロを呼び出さないので、関数が終了する前に別の割り当て(および潜在的なGC)の可能性はありません。私はそれについてもっと明確にすべきだった。 –

+0

私はあまりにも頑張っているのは明らかです。そこでは、最も基本的なSEXP割り当てがすべて必要なときに、ある種のallocEnv関数を探していました。 [はい、私は適切なyellyマクロを追加しました]。 allocSExpのような関数の使用について説明しているドキュメントを指し示すことができれば、ボーナスポイントが得られます。 –

関連する問題