Как умножить скаляр на ListVector в 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?
2 ответа
Решение Kludgey состоит в том, чтобы просто использовать rmagic
команды. Похоже, это путь наименьшего сопротивления для преобразования всего моего кода R в эквивалент rpy2.
Ключевым моментом здесь является понимание того, что «+» и «*» по сути являются функциями 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))))