2017-05-26 73 views
1

我很好奇......是否有一個很好的包裝函數或類似的東西,會導致R註釋掉print()調用的輸出?預評論R輸出

我經常喜歡在我的SO帖子中包含示例輸出,但手動添加必要的格式會變得乏味。

我只是導管粘貼在一起的它的功能...

so <- function(x) { 
    out <- paste0('\n'," # ",capture.output(x)) 
    cat(out) 
} 

...這樣

so(1:4) 

# [1] 1 2 3 4 

so(data.frame(x=rnorm(6),y=rnorm(6))) 

#    x   y 
# 1 -1.41322737 0.9892096 
# 2 0.06482021 -0.4459670 
# 3 0.86084224 -1.1174499 
# 4 0.64835059 -0.4408597 
# 5 -1.81053085 0.6771153 
# 6 -0.96065397 -0.5877505 

so(summary(lm(y~x, data=data.frame(x=rnorm(6),y=rnorm(6))))) 

# 
# Call: 
# lm(formula = y ~ x, data = data.frame(x = rnorm(6), y = rnorm(6))) 
# 
# Residuals: 
#  1  2  3  4  5  6 
# -1.36705 0.08917 -0.20441 1.15421 0.15772 0.17036 
# 
# Coefficients: 
#    Estimate Std. Error t value Pr(>|t|) 
# (Intercept) -0.2762  0.3957 -0.698 0.524 
# x    0.5925  0.6310 0.939 0.401 
# 
# Residual standard error: 0.9089 on 4 degrees of freedom 
# Multiple R-squared: 0.1806, Adjusted R-squared: -0.0242 
# F-statistic: 0.8818 on 1 and 4 DF, p-value: 0.4009 
# 

...但有一個報警在我的頭上去關說有必須是更好的方法。

有嗎?

+0

看起來像一個很好的解決方案給我。不確定哪部分你想成爲「更好」?你所做的似乎很簡單。 – MrFlick

+0

很簡單,是的......但很好奇,是否有一些已經存在於R基礎上的東西,而且這對於不安全的病例是強健的。 –

+0

你可以給一個這樣的「不可靠」的情況下,這是行不通的? – MrFlick

回答

0

謝謝那些沉重的人 - 我會張貼這個答案,以防有人在路上遇到同樣的問題。

有兩個建議我特別喜歡 - overflow包中的soanswer()reprex包中的reprex()

的「溢出」包

soanswer()非常簡單,並打印預註釋文本到控制檯,與任何鬆懈的print()調用一起。因此,

df <- data.frame(x=rnorm(6),y=rnorm(6)) 
soanswer(df) 

打印

df 
##   x   y 
## 1 0.1817694 2.0660698 
## 2 -0.5104673 2.5531193 
## 3 0.1161377 -0.1783387 
## 4 -2.3018991 -0.8449460 
## 5 2.0201924 -0.5774678 
## 6 -1.2148632 1.7873003 

直接到控制檯。它帶有幾個朋友,如soread()sodput(),看起來非常有用。我無法在CRAN找到overflow,通過devtools::install_github("mrdwab/overflow-mrdwab")

的「reprex」包

reprex()充當整個重複的例子,一個包裝從GitHub這樣安裝的,如果你引用AREN對象會抱怨不在其中。用法看起來像

reprex({ 
    df <- data.frame(x=rnorm(6),y=rnorm(6)) 
    df + 1 
}, venue="so") 

,這使得

df <- data.frame(x = rnorm(6), y = rnorm(6)) 
df + 1 
#>   x   y 
#> 1 0.9632665 0.8067071 
#> 2 1.2540641 0.6184877 
#> 3 0.2663705 0.9305724 
#> 4 2.2675316 1.1118192 
#> 5 1.7843500 2.6724034 
#> 6 0.5396790 1.9320059 

到剪貼板。我發現這很酷,但仍然不得不手動縮進它。

綜上所述,我發現overflow包是什麼,我想做更多的定製(這是什麼,今後我將最有可能使用),但很高興地瞭解reprex

+0

我喜歡你的功能,還增加了前導空格的優勢。不確定如果'overflow'包是否也是如此。 – Masoud