Как использовать имя переменной, разделенное пробелами, в as.factor() для доступа к данным фрейма данных?

Когда возникла проблема?

Я пытался использовать метод polr() для R (через rpy2) для порядкового регрессионного анализа с использованием следующего утверждения. В этом утверждении количество шагов является моей зависимой переменной. Когда я устанавливаю (в заголовке столбца, а также в заявлении) подчеркивание вместо пробелов (т.е. Number_of_Steps), все работает нормально.

model = mass.polr('as.factor(Number of Steps) ~ Var2',
                  data=df_data, method='logistic',
                  Hess = True)
# Here, mass = importr('MASS')

Однако с пробелами (т.е. количеством шагов) я получаю следующую ошибку.

RRuntimeError: Ошибка анализа (текст = x, keep.source = FALSE):
: 1:17: неожиданный символ 1: as.factor (количество

Как я пытался решить проблему?

Я искал в Google, а также проверял различные вопросы в SO (например, этот), связанный с этой проблемой. Однако до сих пор я не нахожу решения этой проблемы.

Тогда мой вопрос

Как я могу использовать имя переменной, разделенное пробелами (например, заголовок столбца) в as.factor(variable name) во время использования mass.polr()?

Спасибо за чтение!


person Md. Sabbir Ahmed    schedule 27.12.2020    source источник


Ответы (1)


Это не относится к rpy2. В R можно использовать обратные кавычки (`), чтобы разграничить символ, содержащий пробелы.

Предполагая, что ваш пример в остальном правильный, это должно сделать следующее:

model = mass.polr('as.factor(`Number of Steps`) ~ Var2',
                  data=df_data, method='logistic',
                  Hess=True)

Демонстрация:

import rpy2.robjects as ro

# Get an R data frame with a column name that has
# a space.
dataf = ro.r("""
require("MASS")
cbind(housing, "My Sat"=housing$Sat)
""")

print('column names:')
print(tuple(dataf.colnames))

from rpy2.robjects.packages import importr
mass = importr('MASS')
house_plr = mass.polr(
    ro.Formula('as.factor(`My Sat`) ~ Infl + Type + Cont'),
    data = dataf
)
person lgautier    schedule 28.12.2020
comment
Спасибо за ваши усилия. Но в rpy2 все равно получаю ошибку RRuntimeError: Error in is.factor(x) : object 'Number of Steps' not found - person Md. Sabbir Ahmed; 28.12.2020
comment
Это другая ошибка, чем та, о которой говорится в вопросе. Он говорит вам, что в вашем фрейме данных нет столбца с таким именем. - person lgautier; 28.12.2020
comment
Спасибо за ваш ответ. Я знаю, что я должен получить такую ​​ошибку только тогда, когда этот столбец недоступен. Однако, несмотря на наличие этого столбца (проверено df['Number of Steps']), я обнаружил эту ошибку после сохранения количества шагов внутри `` (т.е. as.factor(Grave Accent symbol Number of Steps Grave Accent Symbol )). - person Md. Sabbir Ahmed; 28.12.2020
comment
Вы не приводите полный пример, но я подозреваю, что ваш фрейм данных не такой, как вы надеетесь. Я добавил автономный пример, чтобы показать, что это работает. - person lgautier; 29.12.2020
comment
Большое спасибо за ваши усилия. Но мне жаль говорить вам, что это не работает в моем случае. Я попытался преобразовать кадр данных pandas в кадр данных R, используя этот оператор pandas2ri.py2ri(df_data). Но все же я получаю ту же ошибку. - person Md. Sabbir Ahmed; 29.12.2020
comment
Гораздо проще попытаться определить источник проблемы на отдельном примере. Если пример, который я привожу в своем ответе, работает в вашей системе, то я действительно думаю, что ваш df_data не то, что вы думаете. - person lgautier; 29.12.2020