передача rpy2 : в аргументах функции

#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')) также должно работать.