Передать имя столбца без кавычек в функцию R [rpy2] - PullRequest
0 голосов
/ 24 февраля 2020

Я хочу использовать ICCest (функция из библиотеки R ICC) в Python с помощью rpy2.

Использование ICCest в R равно ICCest(column_a, column_b, data). Однако невозможно передать имя столбца без кавычек через rpy2.

Если я выполню приведенный ниже код,

import numpy as np
from rpy2.robjects.vectors import DataFrame
from rpy2.robjects.packages import importr
df = DataFrame.from_object({
    'a': np.arange(20).repeat(5),
    'b': np.arange(100),
})
ICC = importr("ICC")
ICC.ICCest('a', 'b', df)

произойдет ошибка и выдаст следующие предупреждения:

WARNING:rpy2.rinterface_lib.callbacks:R[write to console]: Error in eval(as.name(y), data, parent.frame()) : object 'b' not found
Calls: <Anonymous> -> eval -> eval

WARNING:rpy2.rinterface_lib.callbacks:R[write to console]: In addition: 
WARNING:rpy2.rinterface_lib.callbacks:R[write to console]: Warning message:

WARNING:rpy2.rinterface_lib.callbacks:R[write to console]: In (function (x, y, data = NULL, alpha = 0.05, CI.type = c("THD",  :
WARNING:rpy2.rinterface_lib.callbacks:R[write to console]: 

WARNING:rpy2.rinterface_lib.callbacks:R[write to console]:  passing a character string to 'y' is deprecated since ICC vesion 2.3.0 and will not be supported in future versions. The argument to 'y' should either be an unquoted column name of 'data' or an object

Обратите внимание на последнюю строку предупреждения. Как я даже передаю "без кавычек имя столбца" данных "с rpy2?

1 Ответ

0 голосов
/ 24 февраля 2020
from rpy2.robjects.vectors import DataFrame, FloatVector
df = DataFrame({
    'a': FloatVector(np.arange(20).repeat(5)),
    'b': FloatVector(np.arange(100)),
})

Как только я конвертирую numpy массивы в FloatVector, код работает.

Кроме того, лучше использовать as.name или as.symbol здесь:

ICC.ICCest(base.as_name('a'), base.as_name('b'), df)
...