2012-02-29 8 views
0
import numpy 
import rpy2 
from rpy2 import robjects 
import rpy2.robjects.numpy2ri 
from rpy2.robjects.packages import importr 
stats = importr('stats') 
r = robjects.r 
rpy2.robjects.numpy2ri.activate() 

a = numpy.array([ [1, 5, numpy.nan, 4, 5], [2, 6, 8, 7, 8] ]) 
b = numpy.array([ [1, 5, 8, 4, 5], [2, 6, 8, 7, 8] ]) 

std = r.sd(a[0], **{'na.rm': 'TRUE'})    # works fine 
pca = stats.prcomp(b)        # works fine 
pca = stats.prcomp(a)        # error 
pca = stats.prcomp(a, **{'na.rm': 'TRUE'})   # error 
pca = stats.prcomp(a, **{'na.action': 'na.omit'}) # error 

最後の3 prcomp()の呼び出しは私にこのエラーを与える:rpy2のprcomp()のNA値を省略しますか?

Error in svd(x, nu = 0) : infinite or missing values in 'x' 

私は束をGoogleで検索している、適切NAを処理するためにna.action(または他の手段)を使用する方法を見つけ出すことはできませんrcomp2を介してprcomp()の値。私はそれが単なる構文上の問題だと思っています。

ありがとうございました。

答えて

0

"na.action"は関数でなければならず、関数名を持つ文字列でなければなりません。 !NA = NaNのこと

pca = stats.prcomp(a, **{'na.action': stats.na_omit}) 

注: は次のようにトリックを行う可能性があります。あなたの例から:

ar = robjects.vectors.Matrix(a) 

print(ar) 
    [,1] [,2] [,3] [,4] [,5] 
[1,] 1 5 NaN 4 5 
[2,] 2 6 8 7 8 
+0

ご返信ありがとうございます。その構文は私に前と同じエラーを与え、私は運がないいくつかの変種を試しました。その他のアイデアは? – vulture

+0

NA!= NaN。私は答えを編集しました。 – lgautier

関連する問題