2016-11-21 65 views
0

我正在學習如何使用rpy2,並且我想使用stargazer軟件包創建格式化的迴歸輸出。我最好的如何做到這一點的猜測是,下面的代碼:如何使用Stargazer打印適合rpy2

import pandas as pd 
import rpy2.robjects as robjects 

from rpy2.robjects.packages import importr 
stargazer = importr('stargazer') 

from rpy2.robjects import pandas2ri 
pandas2ri.activate() 

r = robjects.r 

df = pd.DataFrame({'x': [1,2,3,4,5], 
        'y': [2,1,3,5,4]}) 

fit = r.lm('y~x', data=df) 

print fit 

print r.stargazer(fit) 

然而,當我運行它時,我得到下面的輸出:

Coefficients: 

(Intercept)   x 

     0.6   0.8 



[1] "\n"         

[2] "% Error: Unrecognized object type.\n" 

所以正在生成的配合,並打印精細。但是,觀星者似乎並不認可這個合適的對象是它可以解析的東西。

有什麼建議嗎?我在這種情況下不正確地打電話給stargazer?

我應該提到,我在Windows 10機器上運行Python 2.7.5,使用R 3.3.2和rpy2版本2.7.8從非官方的windows二進制文件中運行。所以它可能只是Windows構建的一個問題,但看起來很奇怪,除了觀星者之外的所有東西都可以工作。

回答

1

我不熟悉R包stargazer,但從快速瀏覽文檔看來,這似乎是正確的用法。

在此之前,您可能需要檢查問題是執行還是打印。兩條線中的哪一條是失敗的?

p = r.stargazer(fit) 
print(p) 

如果故障是與執行,你可能需要移動更多的代碼R和看是否達到您得到它的工作點。如果不是,這可能是R代碼和/或觀星者的問題。如果你得到它的工作問題是在rpy2 /轉換方面。

rcode = """ 
df <- data.frame(x = c(1,2,3,4,5), 
       y = c(2,1,3,5,4)) 

fit <- lm('y~x', data=df) 

p <- stargazer(fit) 
""" 

# parse and evaluate the R code 
r(rcode) 

# intermediate objects can be retrieved from the `globalenv` to 
# investigate where they differ from the ones obtained earlier. 
# For example: 
print(robjects.globalenv["p"]) 

現在,我們發現,它很可能在stargazer側的問題,我們可以使用任意的數據幀R中的globalenv綁定到符號的問題:

robjects.globalenv["df"] = df 
rcode = """  
fit <- lm('y~x', data=df) 

p <- stargazer(fit) 
""" 

# parse and evaluate the R code 
r(rcode) 

print(robjects.globalenv["p"]) 
+0

關於第一個問題,我只看到第二個命令運行時的錯誤。但我不確定如何解釋。如果stargazer向控制檯輸出一個錯誤,並且它以字符串的形式存儲在p中,那麼這不會產生相同的結果嗎? 我也使用等效語法在r中運行stargazer,沒有任何問題。 – bhackinen

+0

似乎正在發生的事情是,對'stargazer()'的調用完成而沒有錯誤...但字符串的結果向量表示存在錯誤。有點不尋常,但我不熟悉包裝「觀星者」。在任何情況下,這意味着有某種東西在外面的「適合」,它不喜歡,但它不會告訴我們它是什麼。我的第二段代碼中存在拼寫錯誤;它現在應該運行,我修好了它們。我認爲stargazer沒有使用匿名數據框處理合適的對象。這是與包的維護者看到的。 – lgautier