Как умножить скаляр на 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))))
Другие вопросы по тегам