«‘x’ должен быть непустым числовым вектором» ошибка rpy2: почему это не работает?

#python #r #python-3.x #pandas

#python #r #python-3.x #pandas

Вопрос:

Я использую Colab и Python, чтобы найти наиболее подходящее распределение для моих данных. Я новичок в этом, поэтому испытываю много проблем. Пока что вот мой код:

 from rpy2.robjects import pandas2ri
from rpy2.robjects.packages import importr

MASS = importr('MASS')
pandas2ri.activate()

df_temp = pd.DataFrame()
df_temp["Values"] = [37.50,46.79,48.30,46.04,43.40,39.25]
ri_temp = pandas2ri.py2ri(df_temp)

params_temp = MASS.fitdistr(ri_temp, 'normal')
print(params_temp)
  

Сейчас происходит многое, чего я пока не понимаю. Пожалуйста, будьте как можно более описательными!:) Например, я не понимаю, почему я должен использовать pandas2ri.activate() . Ошибка, которую выдает мой код, заключается в следующем:

 /usr/local/lib/python3.6/dist-packages/rpy2/rinterface/__init__.py:146:
  RRuntimeWarning: Error in (function (x, densfun, start, ...)  : 

  'x' must be a non-empty numeric vector
  

… Обратная трассировка между ними…

 warnings.warn(x, RRuntimeWarning)
  RRuntimeError: Error in (function (x, densfun, start, ...)  : 

  'x' must be a non-empty numeric vector
  

Итак, в чем проблема?

Причина, по которой я использую pandas в первую очередь, заключается в том, что мои данные хранятся в списке. Если я могу избежать использования pandas, то какова была бы альтернатива? Когда я попытался просто проанализировать MASS.fitdistr(list, 'normal') , это также выдает мне ошибки. Кроме того, может быть, есть лучшая альтернатива использованию r для поиска наиболее подходящего распределения для данных данного списка? Какие-либо рекомендации?

Комментарии:

1. Пожалуйста, проверьте свой, ri_temp я предполагаю, что это data.frame , в то время как fitdistr , x должен быть vector

Ответ №1:

Это помогло: my_array = np.asarray(my_list) . А затем использую массив в качестве входных данных для: params_temp = MASS.fitdistr(my_array, 'normal') .

Спасибо akrun.