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