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
最后三次prcomp()调用给出了这个错误:
Error in svd(x, nu = 0) : infinite or missing values in 'x'
我已经谷歌搜索了一堆,无法弄清楚如何正确使用na.action(或其他方法)通过rpy2处理prcomp()中的NA值。我希望这只是一个语法问题。
感谢您的帮助。
答案 0 :(得分:0)
“na.action”必须是函数,而不是具有函数名称的字符串。 以下可能会起到作用:
pca = stats.prcomp( a, **{'na.action': stats.na_omit} )
注意NA!= NaN。从你的例子:
ar = robjects.vectors.Matrix(a)
print(ar)
[,1] [,2] [,3] [,4] [,5]
[1,] 1 5 NaN 4 5
[2,] 2 6 8 7 8