Rのduncan.test()をPythonで実行する

どうやって実装したもんかな、と思っていたが、Pythonでロジックをそのまま書かなくても、RのオブジェクトをPythonで利用すれば良いので、以下でひとまずイケるっぽい。

#!/usr/bin/env python3.11
# -*- coding: utf-8 -*-

import os
import sys

while True:
    try:
        import rpy2
        import rpy2.robjects as robjects
        from rpy2.robjects.packages import importr
        from rpy2.robjects.vectors import StrVector
        break
    except:
        os.system(f"{sys.executable} -m pip install rpy2")

# Rのパッケージをインポート
agricolae = importr('agricolae')

# データを準備
y = robjects.FloatVector([1.83, 1.83, 1.83, 2.04, 2.04, 2.04, 2.24, 2.24, 2.24])
trt = robjects.FactorVector(StrVector(['A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C']))

# データをRの環境に割り当て
robjects.globalenv['y'] = y
robjects.globalenv['trt'] = trt

# 分散分析を実行
model = robjects.r('aov(y ~ trt)')

# Duncanの新しい多重範囲検定を実行
duncan_result = agricolae.duncan_test(model, "trt", main="Example")

# 結果を表示
print(duncan_result)

ほんま、Pythonは何でもあるなぁ…。