#python #r #rpy2
#python #r #rpy2
Вопрос:
Я пытаюсь обновить старый код Python с Rpy1 на Rpy2, но есть пара строк, которые я не могу запустить без ошибок:
result = rpy.r.kmeans(datnorm, cls, kmeans_iterations, kmeans_nstart)
sse = sum(result['withinss'])
Я обновил зависимость Rpy до Rpy2 и переработал этот код, чтобы использовать Rpy2 importr
для загрузки модуля и kmeans
функции R stats. Вот как выглядит код после изменения:
result = rstats.kmeans(matnorm, cls, kmeans_iterations, kmeans_nstart)
sse = sum(result['withinss'])
Когда выполняется этот код, я получаю эту ошибку:
TypeError: Indices must be integers or slices, not <class 'str'>
Я понимаю, что это говорит о том, что я не могу использовать строку в качестве индекса, потому kmeans
что возвращает целочисленный вектор. Как мне получить withinss
значение, если результат не является dict?
Ответ №1:
.rx2()
вероятно, это то, что вы хотите:
result.rx2('withinss')
(см https://rpy2.github.io/doc/v3.4.x/html/vector.html#extracting-r-style )
Комментарии:
1. Идеально! В конце концов я понял, что могу
result[4]
получить доступ к общему значению withins, но это явно правильный способ.2. ДА. Это также работает. Чтобы избежать неожиданностей, если библиотека R изменит порядок элементов,
result
вы также можете сделать что-то вродеresult[result.names.index('withinss')]