#python #rpy2
#python #rpy2
Вопрос:
Я столкнулся с проблемой при попытке выполнить приведенный ниже код r с помощью python rpy2.
from rpy2.robjects import r
import rpy2.robjects as ro
from rpy2.robjects.conversion import localconverter
from rpy2.robjects import pandas2ri
from rpy2.robjects.packages import importr
stats = importr("stats")
with localconverter(ro.default_converter pandas2ri.converter):
Rdataframe2 = ro.conversion.py2rpy(dtw)
rdism = r["as.dist"](Rdataframe2)
ttclust = r.hclust(rdism)
ttclusterange = r.cutree(ttclust, k='1:3')
Я не могу найти способ передать аргумент k="1:3"
в cutree
функции.
Я продолжаю получать сообщение об ошибке с указанием
""elements of 'k' must be between 1 and %d", :
missing value where TRUE/FALSE needed
кажется, я не могу найти правильный синтаксис для выполнения последней строки.
Может кто-нибудь, пожалуйста, помочь мне решить эту проблему
Ответ №1:
1:3
Выражение предназначено для генерации вектора c(1, 2, 3)
в R. Однако вы не оцениваете его в R, а передаете его как строку / символ '1:3'
, используя rpy2. Попробуйте вместо этого передать эквивалентный список [1, 2, 3]
или использовать list(range(1, 3 1))
. Это:
r.cutree(ttclust, k=list(range(1, 3 1)))
Комментарии:
1. большое вам спасибо за совет, теперь он работает нормально.
2. Ответ работает нормально. В последние версии rpy2 (3.4.x, IIRC) добавлена дополнительная опция в виде удобной функции, помогающей смешивать фрагменты R (как недооцененные объекты языка R) в коде Python.
r.cutree(ttclust, k=ro.rl('1:3'))
также должно работать.