我正在尝试通过Jupyter在Python上运行R鼠标包。我正在努力解决许多错误和技术问题。让我们获取Iris数据集并插入一些na:
import numpy as np
import pandas as pd
from sklearn.datasets import load_iris
iris = load_iris()
data1 = pd.DataFrame(data= np.c_[iris['data'], iris['target']],
columns= iris['feature_names'] + ['target'])
data1.iloc[1,1] = np.nan
data1.iloc[4,4] = np.nan
data1.iloc[149,2] = np.nan
在R中,我将运行以下脚本:
library(mice)
md.pattern(data1)
imputed_df = mice(data1, m=3)
df = complete(imputed_df,2)
这是问题,在Python中我正试图运行以下脚本:
from rpy2.robjects import pandas2ri
pandas2ri.activate()
from rpy2.robjects.packages import importr
Mice = importr('mice')
pattern = robjects.r("md.pattern")
Mice.complete(Mice.mice(pattern(data1), m=3),2)
我遇到两种错误:
关于完整功能:
[AttributeError:模块'鼠标'没有属性'完成'
关于小鼠功能:
TypeError:'NULLType'对象不可迭代
最重要的是,您如何建议在Python上运行R鼠标?
1]这可能是因为complete
函数不是来自mice
库,而是来自tidyr
。您可以通过简单地在R中检查它来进行检查:
print(complete)
显示它来自的命名空间:
function (data, ..., fill = list())
{
UseMethod("complete")
}
<bytecode: 0x55bc2e74e1d0>
<environment: namespace:tidyr>
我很好奇为什么它在Rpy2中没有像在R中那样被重新导出(@lgautier的回答会有所帮助)。
2)我无法复制;以下作品符合我的期望:
mice = importr('mice')
tidyr = importr('tidyr')
tidyr.complete(mice.mice(pattern(data1), m=3), 2)