【问题标题】:Omit NA values from prcomp() in rpy2?在 rpy2 中忽略 prcomp() 的 NA 值?
【发布时间】:2012-03-19 08:12:43
【问题描述】:
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 值。我希望这只是一个语法问题。

感谢您的帮助。

【问题讨论】:

    标签: python r numpy rpy2


    【解决方案1】:

    “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
    

    【讨论】:

    • 感谢您的回复。该语法给了我与以前相同的错误,我尝试了一些变体但没有运气。还有什么想法吗?
    猜你喜欢
    • 2018-04-24
    • 2020-08-11
    • 1970-01-01
    • 2013-03-26
    • 1970-01-01
    • 2013-10-16
    • 2015-10-20
    • 1970-01-01
    • 2012-04-15
    相关资源
    最近更新 更多