2012-10-12 12 views
5

सरल प्रश्न मुझे लगता है लेकिन मुझे कोई जवाब नहीं मिला है। मेरे डेटा फ्रेम पर "AsIs" वर्ग विशेषता से छुटकारा पाने के लिए कैसे। यह foreign पैकेज से write.dbf को डीबीएफ में कनवर्ट करने से रोक रहा है। मैं rpy2 से काम कर रहा हूं लेकिन यह आर "डेटा" के साथ आर डेटा फ्रेम के साथ काम करता है। मैंने त्रुटि संदेश के नीचे पूरा कोड डाला। dBFS = write_dbf (r_dataframe)"AsIs" वर्ग विशेषता से छुटकारा पाएं

Error in function (dataframe, file, factor2char = TRUE, max_nchar = 254) : 
    data frame contains columns of unsupported class(es) AsIs 

--------------------------------------------------------------------------- 
RRuntimeError        Traceback (most recent call last) 
<ipython-input-26-9072df63231a> in <module>() 
----> 1 dbfs = write_dbf(r_dataframe) 

/home/matthew/.virtualenvs/mypython/lib/python3.2/site-packages/rpy2-2.2.6dev_20120814-py3.2-linux-i686.egg/rpy2/robjects/functions.py in __call__(self, *args, **kwargs) 
    80     v = kwargs.pop(k) 
    81     kwargs[r_k] = v 
---> 82   return super(SignatureTranslatedFunction, self).__call__(*args, **kwargs) 

/home/matthew/.virtualenvs/mypython/lib/python3.2/site-packages/rpy2-2.2.6dev_20120814-py3.2-linux-i686.egg/rpy2/robjects/functions.py in __call__(self, *args, **kwargs) 
    32   for k, v in kwargs.items(): 
    33    new_kwargs[k] = conversion.py2ri(v) 
---> 34   res = super(Function, self).__call__(*new_args, **new_kwargs) 
    35   res = conversion.ri2py(res) 
    36   return res 

RRuntimeError: Error in function (dataframe, file, factor2char = TRUE, max_nchar = 254) : 
    data frame contains columns of unsupported class(es) AsIs 

मैं अजगर rpy2 उपयोग कर रहा हूँ आर से बात करने की यही कारण है कि नहीं है, जहां समस्या है, लेकिन यहाँ मेरे कोड है। write.dbf Rpy2 से काम करता है यदि मैं आर से "ASIs" के साथ डेटा फ्रेम का उपयोग करता हूं।

(अजगर)

df = DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'C':[7,8,9]},index=["one", "two", "three"]) I am going from python pandas dataframe to and R datafram using 

    fore = importr("foreign") 

    In [19]: 

    r_dataframe = com.convert_to_r_dataframe(df) 

    In [20]: 

    print(type(r_dataframe)) 

    <class 'rpy2.robjects.vectors.DataFrame'> 

    In [32]: 

    r_dataframe 

    Out[32]: 

<DataFrame - Python:0xb3db8ac/R:0xc23ac50> 
[IntVector, IntVector, IntVector] 
    A: <class 'rpy2.robjects.vectors.IntVector'> 
    <IntVector - Python:0xc1fb1ec/R:0xc23ac28> 
[  1,  2,  3] 
    B: <class 'rpy2.robjects.vectors.IntVector'> 
    <IntVector - Python:0xc1fb36c/R:0xc23ac00> 
[  4,  5,  6] 
    C: <class 'rpy2.robjects.vectors.IntVector'> 
    <IntVector - Python:0xc1fb4ec/R:0xc23abd8> 
[  7,  8,  9] 


    print(r_dataframe) 

      A B C 
    one 1 4 7 
    two 2 5 8 
    three 3 6 9 

    In [25]: 

    write_dbf =robjects.r("write.dbf") 

    read_dbf = robjects.r("read.dbf") 

    In [26]: 

    dbfs = write_dbf(r_dataframe) 

Error in function (dataframe, file, factor2char = TRUE, max_nchar = 254) : 
    data frame contains columns of unsupported class(es) AsI 

    dbfs = write_dbf(r_dataframe) 
+1

क्या आपने प्रभावशाली कॉलम से उस वर्ग विशेषता को आसानी से निकालने का प्रयास किया है? – joran

उत्तर

9

यहाँ कैसे मैं एक AsIs वर्ग विशेषता से छुटकारा पाने होता है। ध्यान दें कि वे किसी भी अन्य वर्ग विशेषताओं को संरक्षित रखने के लिए सावधानी बरतते हैं जिनके पास वेक्टर हो सकता है:

unAsIs <- function(X) { 
    if("AsIs" %in% class(X)) { 
     class(X) <- class(X)[-match("AsIs", class(X))] 
    } 
    X 
} 

## Show why the function is needed 
a <- 1:10 
b <- factor(1:10) 

class(I(a)) 
# [1] "AsIs" 
class(I(b)) 
# [1] "AsIs" "factor" 

## Show that the function reverses the effect of `I()` 
identical(a, unAsIs(I(a))) 
# [1] TRUE 
identical(b, unAsIs(I(b))) 
# [1] TRUE 
+0

हाय अच्छा लग रहा है यह सुनिश्चित करेगा कि मैं इसे इस सप्ताह के अंत में प्रबंधित कर सकता हूं। – user1246428

+0

और बहुत बहुत धन्यवाद – user1246428

संबंधित मुद्दे