2014-03-30 94 views
1

使用rmagic我越来越%R%%R之间的行为不一致阅读a particular file(而不是其他人)时:为什么为什么'rmagic'%R读取文件时会导致错误,而%% R不会?

%%R 

usda = read.csv("USDA.csv") 

工作,同时

%R usda = read.csv("USDA.csv") 

失败

--------------------------------------------------------------------------- 
TypeError         Traceback (most recent call last) 
<ipython-input-64-01ec3b4742c8> in <module>() 
----> 1 get_ipython().magic(u'R usda = read.csv("USDA.csv")') 

... 

/Library/Python/2.7/site-packages/numpy/core/numeric.pyc in asarray(a, dtype, order) 
    458 
    459  """ 
--> 460  return array(a, dtype, copy=False, order=order) 
    461 
    462 def asanyarray(a, dtype=None, order=None): 

TypeError: __float__ returned non-float (type rpy2.rinterface.NAIntegerType) 

再一次,这只发生在the linked file,而不是与其他任何我试过的。

回答

1

这是我以前见过的缺失值处理问题。它应该发生在你缺少值的时候。我不确定我们是否应该将其视为错误。但%R -n usda = read.csv('USDA.csv')使用-n来抑制返回(一个numpyarray)将避免该问题。

还应该注意,如果在%R -n usda = read.csv('USDA.csv')之后%Rpull usda,则应该同样得到相同的异常。

如果你想拥有的数据来回pythonR之间在这样的情况下,使用pandas然后convert_to_r_dataframeconvert_robject将更好地工作,我想读它。

+0

但是为什么相同的代码应该使用'%% R'而不是'%R'。这对我来说看起来像一个错误。 – orome

+0

区别在于'%% R'不会尝试返回一个值,而是'%R'确实,并且在将'data.frame'作为'array'返回时,它就成为了一个部分。也可能被认为是bug。无论如何,在很多情况下'R' - >'python'转换都很棘手。 –

+0

啊,我现在明白了:这就是'-n'所做的。说得通。 – orome

相关问题