Как умножить скаляр на ListVector в rpy2

#python #r #rpy2 #scalar #vector-multiplication

#python #r #rpy2 #скаляр #векторное умножение

Вопрос:

Я выполняю следующий анализ и пытаюсь построить обратный логит моей модели:

 R.plot(formula, data=data, ylab = 'P(outcome =  1 | outcome)', xlab = 'SURVRATE: Probability of Survival after 5 Years', xaxp = c(0, 95, 19))
a = R.coef(mod1)[0] 
b = R.coef(mod1)[1]
R.curve(invlogit(a   b*R.x)) 
  

invlogit это функция R, к которой я обращаюсь через STAP.

Все работает отлично, но когда я запускаю curve функцию, я получаю сообщение об ошибке, что TypeError: unsupported operand type(s) for *: 'float' and 'ListVector'

Я пробовал различные способы обработки этого, например, используя np.multiply среди прочих, все безрезультатно. Как мне обрабатывать умножение скаляра на ListVector в python?

Ответ №1:

Простое решение — просто использовать rmagic команды. Похоже, что это путь наименьшего сопротивления для преобразования всего моего R-кода в эквивалент rpy2.

Ответ №2:

Ключевым моментом здесь является понимание того, что » » и «*» по сути являются R-функциями, как и любые другие. Это означает, что нам также нужно их «импортировать». Ваш пример не воспроизводим, поэтому я сделаю все возможное, чтобы набросать решение:

 import rpy2.robjects as ro
from rpy2.robjects.vectors import FloatArray
add = ro.r[' ']
multi = ro.r['*']
R.curve(invlogit(add(FloatArray([a]), multi(FloatArray([b]), R.x))))