2011-11-09 3 views
1

Rの.Callインターフェイスを使用してRからC関数を呼び出しています。私が渡しているオブジェクトの中にはカスタム属性が付いているものがあり、.Call関数の別の引数として渡すことなく、これらの属性にアクセスしたいと思っています。例えば.Call使用時にR SEXPオブジェクトのカスタム属性を取得

、カスタム文字列属性で実数の単純なケースを考えてみます。C関数内から「MYNAME」属性で取得する

x <- 1 
attr(x, "myname") <- "Abiel" 

一つの方法は、独立したとして、それを渡すことです引数:

.Call("test", x, as.character(attr(x, "myname"))) 

しかし、私はむしろちょうど

.Call("test", x) 

を行い、その後回復しますC関数内の "myname"属性私はgetAttrib()関数でこれを行う方法を理解することができませんでした。例えば、以下のこの関数のメインラインは、ヌル値を示す真と評価されます。 getAttrib()のすべての例は、​​として事前に定義されたシンボルを、関与するようマニュアルを書いRの拡張子をスキャン

SEXP test(SEXP x) 
{ 
    isNull(getAttrib(x, mkChar("myname"))); 
} 

は、ずっと私を助けていません。 This sectionは、Cで作成しているSEXPオブジェクトにカスタム属性を付加する方法を説明しますが、C関数に渡されるオブジェクトに関連付けられたカスタム属性を取得する方法は示しません。

答えて

2

シンボルルックアップテーブルの属性をinstallにする必要があります。 5.9.4 (Attributes)getAttribWriting R Extensionsに使用する例はありませんが、xts.hにはいくつかの例があります。

次のコードは、FALSEと評価されます。

SEXP test(SEXP x) 
{ 
    isNull(getAttrib(x, install("myname"))); 
} 
+0

ありがとうございます。私はこれをgetAttrib(x、install( "myname"))を使って動作させることができました。 – Abiel

関連する問題