Я пытаюсь вызвать функцию в пакете R из Python.Для функции R требуется функция обратного вызова, которая принимает вектор значений, выполняет некоторые вычисления и возвращает вектор результата.
Я могу заставить работать обратный вызов, но только если он возвращает скаляр.Все попытки вернуть более одного значения приводят к тому, что rpy2 выдает ошибку ValueError.
Из rpy2.robject я пробовал FloatVectors и IntVectors.Я также попытался преобразовать мой список Python в массив данных или массив pandas, а затем использовать интерфейсы rpy2 для их преобразования.Ничего не работает.
Чтобы было ясно, я могу успешно использовать все эти методы для создания объектов, которые я могу передать из Python в список аргументов функции R.Я получаю сообщение об ошибке только при попытке вернуть вектор из обратного вызова Python.
Я перевел проблему в простой тест.Вот код R, который принимает и затем вызывает функцию обратного вызова:
Test <-
function(cb) {
cb()
}
И вот код Python, который я использую для вызова кода R:
import rpy2.rinterface as ri
from rpy2 import robjects
robjects.r('source("Test.R")')
test = robjects.r['Test']
@ri.rternalize
def cb_test():
return robjects.FloatVector([1.0, 2.0, 3.0])
test(cb_test)
Ожидаемый результат:
FloatVector with 3 elements.
1.000000 2.000000 3.000000
Фактический результат:
<class 'ValueError'>: [1] 1 2 3
Заранее спасибо всем, кто может понять, что я делаю неправильно.