将未加引号的列名输入R函数[rpy2]

问题描述 投票:0回答:1

我想借助rpy2在Python中使用ICCest(R库ICC中的函数)。

R中ICCest的用法是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传递“'data'的未引用列名”?

python r rpy2
1个回答
0
投票
from rpy2.robjects.vectors import DataFrame, FloatVector
df = DataFrame({
    'a': FloatVector(np.arange(20).repeat(5)),
    'b': FloatVector(np.arange(100)),
})

一旦将numpy数组转换为FloatVector,代码就会起作用。

© www.soinside.com 2019 - 2024. All rights reserved.