11

簡単な質問だと思いますが、答えが見つかりません。データ フレームの「AsIs」クラス属性を取り除く方法。write.dbfパッケージからのforeigndbf への変換を妨げています。私はrpy2から作業していますが、「AsIs」のないRデータフレームで動作します。エラーメッセージの下に完全なコードを配置しました。dbfs = write_dbf(r_dataframe)

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

私はRと話すためにpython rpy2を使用しています。それは問題がある場所ではありませんが、ここに私のコードがあります。「write.dbfAsIs」のないRのデータフレームを使用すると、Rpy2から機能します。

(パイソン)

    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)
4

1 に答える 1

13

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
于 2012-10-12T20:27:09.797 に答える