2012-09-20 3 views
0

CSV 데이터 파일을 읽을 수 없습니다/Rmagic :RPY2/Rmagic : 나는 내가 RPY2를 사용하여 IPython 노트북에서 읽기 위해 노력하고있어 꽤 표준 CSV 데이터 세트가

# R code 
%load_ext rmagic 
%R my.data <- read.csv("/Users/xxx/Documents/data.csv") 

이 오류를 얻을 :

--------------------------------------------------------------------------- 
TypeError         Traceback (most recent call last) 
<ipython-input-31-844400cf68c6> in <module>() 
    25 ####Chunk 1: Inputting and checking the data 
---> 27 get_ipython().magic(u'R my.data <- read.csv("/Users/xxx/Documents/data.csv")') 
    28 get_ipython().magic(u'R summary(my.data)') 

/Library/Frameworks/EPD64.framework/Versions/7.3/lib/python2.7/site-packages/IPython/core/interactiveshell.pyc in magic(self, arg_s) 
    2162   magic_name, _, magic_arg_s = arg_s.partition(' ') 
    2163   magic_name = magic_name.lstrip(prefilter.ESC_MAGIC) 
-> 2164   return self.run_line_magic(magic_name, magic_arg_s) 
    2165 
    2166  #------------------------------------------------------------------------- 

/Library/Frameworks/EPD64.framework/Versions/7.3/lib/python2.7/site-packages/IPython/core/interactiveshell.pyc in run_line_magic(self, magic_name, line) 
    2088     kwargs['local_ns'] = sys._getframe(stack_depth).f_locals 
    2089    with self.builtin_trap: 
-> 2090     result = fn(*args,**kwargs) 
    2091    return result 
    2092 

/Library/Frameworks/EPD64.framework/Versions/7.3/lib/python2.7/site-packages/IPython/extensions/rmagic.pyc in R(self, line, cell, local_ns) 

/Library/Frameworks/EPD64.framework/Versions/7.3/lib/python2.7/site-packages/IPython/core/magic.pyc in <lambda>(f, *a, **k) 
    189  # but it's overkill for just that one bit of state. 
    190  def magic_deco(arg): 
--> 191   call = lambda f, *a, **k: f(*a, **k) 
    192 
    193   if callable(arg): 

/Library/Frameworks/EPD64.framework/Versions/7.3/lib/python2.7/site-packages/IPython/extensions/rmagic.pyc in R(self, line, cell, local_ns) 
    579   if return_output and not args.noreturn: 
    580    if result != ri.NULL: 
--> 581     return self.Rconverter(result, dataframe=False) 
    582 
    583 __doc__ = __doc__.format(

/Library/Frameworks/EPD64.framework/Versions/7.3/lib/python2.7/site-packages/IPython/extensions/rmagic.pyc in Rconverter(Robj, dataframe) 
    113    return np.asarray(Robj) 
    114   Robj = np.rec.fromarrays(Robj, names = names) 
--> 115  return np.asarray(Robj) 
    116 
    117 @magics_class 

/Library/Frameworks/EPD64.framework/Versions/7.3/lib/python2.7/site-packages/numpy/core/numeric.py in asarray(a, dtype, order) 
    233 
    234  """ 
--> 235  return array(a, dtype, copy=False, order=order) 
    236 
    237 def asanyarray(a, dtype=None, order=None): 

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

내 CSV 데이터에서 NA 값과 관련이 있다고 생각합니다. 실제로 값을 입력하지 않습니다. 빈 칸만 입력하십시오 (예 : 1,,, 3,4).

공백을 NA, 공백, 0 등으로 바꾸려고했습니다. 항상 같은 오류가 발생합니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

편집 :

import rpy2.robjects as robjects                                                       
myData = robjects.r['read.csv']("/Users/xxx/Documents/data.csv") 
print robjects.r['summary'](myData) 

을하고 그것을 잘 작동합니다 : 나는 (내 데이터 세트를 변경하지 않고) 순수 RPY2와 함께 그 일을 시도! 그래서 이것은 IPython/Rmagic을 가지고 있어야합니다.

답변

2

IPython의 %R이 전체 csv 파일을 dtype float의 단일 배열로 변환하려고 시도하기 때문에 오류가 발생했습니다. 정수 열의 NA 값을 float로 변환 할 수 없으므로 예외가 발생합니다. 예를 들어

:

>>> import rpy2.robjects as ro 
>>> import numpy as np 
>>> myData = ro.r['read.csv']('data.csv') 
>>> np.asarray(myData) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/lib/python2.7/dist-packages/numpy/core/numeric.py", line 235, in asarray 
    return array(a, dtype, copy=False, order=order) 
TypeError: __float__ returned non-float (type rpy2.rinterface.NAIntegerType) 

간단한 수정 %R--dataframe/-d 플래그를 사용하는 것이다. --noreturn/-n 플래그를 사용해야하므로 반환 값을 배열로 변환하지 않도록하십시오. 그러면 오류가 다시 트리거됩니다. [대안 적으로, 우리는 명령의 끝에 세미콜론을 가질 수있다. 예를 들면

:

In [1]: %load_ext rmagic 

In [2]: %R -n -d myData myData <- read.csv('data.csv') 

In [3]: myData 
Out[3]: 
array([(1, 1, 1, 25, 0.590334, 0.4991572, 0.2189781, 9), 
     (1, 1, 1, 25, 0.5504164, 0.5007439, 0.2136691, 13), 
     (1, 1, 1, 25, 0.588486, 0.4879058, 0.2105431, 11), 
     (1, 1, 1, 25, 0.5882244, 0.5148501, 0.2105431, -2147483648), 
     (1, 2, 1, 25, nan, 0.489045, 0.2025757, 12)], 
     dtype=[('replicate', '<i4'), ('line', '<i4'), ('genotype', '<i4'), ('temp', '<i4'), ('femur', '<f8'), ('tibia', '<f8'), ('tarsus', '<f8'), ('SCT', '<i4')]) 

NAInteger 값 ( numpy.iinfo('<i4').min 같다) -2147483648로 전환시키고 있음을주의.

+0

csv 파일이 동종 유형이라고 가정 할 때 약간 굵은 글꼴이 표시됩니다. 현재 * - dataframe * 옵션을 기본값으로 만들고, "--homogeneous"와 같은 새 옵션을 만드는 것이 더 직관적 일 수 있습니까? – lgautier

1

필자는 열의 유형이 잘못 추측되는 흔적에서 추측하고 있습니다 (NA는 정수이지만 Python float라고 생각합니다). 그것은 ippython 또는 rpy2 (rpy2를 단독으로 사용해보아야 함) 문제인지 여부를 알 수 없습니다. NA가있는 열에 정수와 같은 숫자 값이 있으면 .0을 추가하고 문제가 해결되는지 확인합니다.

+0

.0을 추가해도 아무 것도 변경되지 않았습니다. 필자는 순수 rpy2 테스트 코드로 주요 게시물을 편집했습니다. 그것은 IPython과 관련이있는 것처럼 보입니다. –

+0

+1 ipython을 사용합니다. 그것들이 수정되도록 버그 리포트를 제출하십시오. – lgautier

+0

완료 : https://github.com/ipython/ipython/issues/2418 –

관련 문제