есть ли способ вернуть имена из векторов R, матриц и т. д. в rpy2 > = 3.0.0

HTML Purifier - это стандартная библиотека фильтров HTML, написанная на PHP. HTML-очиститель не только удалит весь вредоносный код (более известный как XSS) с тщательно проверенным, безопасным, но и разрешенным белым списком, он также гарантирует, что ваши документы соответствуют стандартам, что только достижимо с полным знанием спецификаций W3C.

5
задан lgautier 2 March 2019 в 02:12
поделиться

1 ответ

rpy2 3.0.0 пытается упростить свою систему преобразования, и с этим сделать свои недостатки легче как предвидеть, так и смягчать.

Здесь, когда активен слой преобразования в numpy, происходит следующее:

  • numpy массивы преобразуются в R массивы всякий раз, когда это необходимо для R
  • R массивы преобразуются в numpy массивы при возврате из R

Эта симметрия не является обязательным требованием, а является способом, которым по умолчанию является уровень преобразования numpy. Можно настроить слой асимметричного преобразования, который будет здесь преобразовывать числовые массивы в R-массивы, но оставляя R-массивы как таковые при возвращении из R, относительно быстро и легко.

import numpy
from rpy2.rinterface_lib import sexp
from rpy2 import robjects
from rpy2.robjects import conversion
from rpy2.robjects import numpy2ri

# We are going to build our custom converter by subtraction, that is
# starting from the numpy converter and only revert the part converting R
# objects into numpy arrays to the default conversion. We could have also
# build it by addition. 
myconverter = conversion.Converter('assym. numpy',
                                   template=numpy2ri.converter)
myconverter.rpy2py.register(sexp.Sexp,
                            robjects.default_converter.rpy2py)

Это пользовательское преобразование может быть использовано тогда, когда оно нам нужно:

with conversion.localconverter(myconverter):
    res = stats.quantile(numpy.array([1, 2, 3, 4]))

Результат:

>>> print(res.names)                                                                                                   
[1] "0%"   "25%"  "50%"  "75%"  "100%"

Если это выглядит как слишком много усилий, вы можете также полностью пропустите конвертер numpy, используйте только конвертер по умолчанию и вручную приведите ваши numpy массивы к подходящим R массивам, когда вы сочтете это необходимым:

>>> stats.quantile(robjects.vectors.IntVector(numpy.array([1, 2, 3, 4]))).names                                           
R object with classes: ('character',) mapped to:
['0%', '25%', '50%', '75%', '100%']
0
ответ дан lgautier 2 March 2019 в 02:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: