capture.output (), позволяя также показывать - PullRequest
0 голосов
/ 04 января 2019

Я нахожусь в ситуации, когда я хочу показать вывод и сохранить его в файл.В частности, я пытаюсь как распечатать результат sessionInfo() и сохранить его в файл.capture.output() не совсем дает ожидаемый эффект.

> sessionInfo()
R version 3.5.1 (2018-07-02)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Linux Mint 18

Matrix products: default
BLAS: /usr/lib/openblas-base/libblas.so.3
LAPACK: /usr/lib/libopenblasp-r0.2.18.so

locale:
 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C               LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8    
 [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8    LC_PAPER=en_US.UTF-8       LC_NAME=C                 
 [9] LC_ADDRESS=C               LC_TELEPHONE=C             LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

loaded via a namespace (and not attached):
[1] compiler_3.5.1 tools_3.5.1    packrat_0.5.0 
> y = capture.output(sessionInfo())
> print(y)
 [1] "R version 3.5.1 (2018-07-02)"                                                                                    
 [2] "Platform: x86_64-pc-linux-gnu (64-bit)"                                                                          
 [3] "Running under: Linux Mint 18"                                                                                    
 [4] ""                                                                                                                
 [5] "Matrix products: default"                                                                                        
 [6] "BLAS: /usr/lib/openblas-base/libblas.so.3"                                                                       
 [7] "LAPACK: /usr/lib/libopenblasp-r0.2.18.so"                                                                        
 [8] ""                                                                                                                
 [9] "locale:"                                                                                                         
[10] " [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C               LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8    "
[11] " [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8    LC_PAPER=en_US.UTF-8       LC_NAME=C                 "
[12] " [9] LC_ADDRESS=C               LC_TELEPHONE=C             LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       "
[13] ""                                                                                                                
[14] "attached base packages:"                                                                                         
[15] "[1] stats     graphics  grDevices utils     datasets  methods   base     "                                       
[16] ""                                                                                                                
[17] "loaded via a namespace (and not attached):"                                                                      
[18] "[1] compiler_3.5.1 tools_3.5.1    packrat_0.5.0 "                                                                
> cat(y)
R version 3.5.1 (2018-07-02) Platform: x86_64-pc-linux-gnu (64-bit) Running under: Linux Mint 18  Matrix products: default BLAS: /usr/lib/openblas-base/libblas.so.3 LAPACK: /usr/lib/libopenblasp-r0.2.18.so  locale:  [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C               LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8      [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8    LC_PAPER=en_US.UTF-8       LC_NAME=C                   [9] LC_ADDRESS=C               LC_TELEPHONE=C             LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C         attached base packages: [1] stats     graphics  grDevices utils     datasets  methods   base       loaded via a namespace (and not attached): [1] compiler_3.5.1 tools_3.5.1    packrat_0.5.0 

Проблема в том, что использование print() приводит к печати счетчиков [1] и т. Д., А использование cat() приводит к потере разрыва строки.Есть ли способ показать это точно так же, как обычно, в то же время захватывая это?

1 Ответ

0 голосов
/ 04 января 2019

Ответ прост.Нужно просто добавить разрывы строк и использовать cat(), таким образом:

cat(paste(y, collapse = "\n"))

Эту вспомогательную функцию можно использовать как для захвата, так и для передачи вывода шоу:

capture_save = function(expr) {
  y = capture.output(eval(expr, envir = parent.frame()))
  cat(paste(y, collapse = "\n"))
  y
}

Пример:

> y = capture_save(sessionInfo())
R version 3.5.1 (2018-07-02)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Linux Mint 18

Matrix products: default
BLAS: /usr/lib/openblas-base/libblas.so.3
LAPACK: /usr/lib/libopenblasp-r0.2.18.so

locale:
 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C               LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8    
 [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8    LC_PAPER=en_US.UTF-8       LC_NAME=C                 
 [9] LC_ADDRESS=C               LC_TELEPHONE=C             LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

loaded via a namespace (and not attached):
[1] compiler_3.5.1 tools_3.5.1    packrat_0.5.0 
> y
 [1] "R version 3.5.1 (2018-07-02)"                                                                                    
 [2] "Platform: x86_64-pc-linux-gnu (64-bit)"                                                                          
 [3] "Running under: Linux Mint 18"                                                                                    
 [4] ""                                                                                                                
 [5] "Matrix products: default"                                                                                        
 [6] "BLAS: /usr/lib/openblas-base/libblas.so.3"                                                                       
 [7] "LAPACK: /usr/lib/libopenblasp-r0.2.18.so"                                                                        
 [8] ""                                                                                                                
 [9] "locale:"                                                                                                         
[10] " [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C               LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8    "
[11] " [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8    LC_PAPER=en_US.UTF-8       LC_NAME=C                 "
[12] " [9] LC_ADDRESS=C               LC_TELEPHONE=C             LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       "
[13] ""                                                                                                                
[14] "attached base packages:"                                                                                         
[15] "[1] stats     graphics  grDevices utils     datasets  methods   base     "                                       
[16] ""                                                                                                                
[17] "loaded via a namespace (and not attached):"                                                                      
[18] "[1] compiler_3.5.1 tools_3.5.1    packrat_0.5.0 "       
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...