2017-09-13 159 views
0

在Rstudio版本(1.0.143)中。Rstudio文件名在rmarkdown .rmd文件中完成

我正在使用Rstudio軟件包項目並在其中使用Rmarkdown。所有的代碼文件都在./R文件夾中。所有的數據文件都在./Data文件夾中。默認getwd()是父文件夾./(包含./R和./Data)。

我使用RStudio中的文件完成工具,我認爲它非常有用。但在.Rmd文件中,它不能按預期工作。例如,以下是兩種情況:

  • 在包含在./R文件夾中的.R文件中。我打開括號和 完成工作,因爲人們會期望,相對於getwd() 文件夾,即父級。因此,在./R文件「hello.R」將完成爲 「./R/hello.R」

  • 在.Rmd文件中,也包含在./R文件夾中。我開始一個R塊。 I 請打開方括號,完成後不會給我「./R」 文件夾,即使getwd()給出./R文件中的「hello.R」的父項「./」, 完成, hello.R」。

這是已知錯誤或者功能?

> sessionInfo() 
R version 3.4.1 (2017-06-30) Platform: x86_64-w64-mingw32/x64 (64-bit) Running under: Windows 7 x64 (build 7601) Service Pack 1 

Matrix products: default 

locale: [1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United States.1252 LC_MONETARY=English_United States.1252 [4] LC_NUMERIC=C       LC_TIME=English_United States.1252  

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

loaded via a namespace (and not attached): [1] Rcpp_0.12.12  compiler_3.4.1  RColorBrewer_1.1-2 plyr_1.8.4   base64enc_0.1-3  tools_3.4.1   rpart_4.1-11   [8] digest_0.6.12  evaluate_0.10.1  tibble_1.3.4  gtable_0.2.0  htmlTable_1.9  checkmate_1.8.3  lattice_0.20-35  [15] rlang_0.1.2   Matrix_1.2-11  gridExtra_2.2.1  stringr_1.2.0  cluster_2.0.6  knitr_1.17 htmlwidgets_0.9  [22] grid_3.4.1   nnet_7.3-12   data.table_1.10.4 survival_2.41-3  foreign_0.8-69  pacman_0.4.6  latticeExtra_0.6-28 [29] Formula_1.2-2  ggplot2_2.2.1  magrittr_1.5  Hmisc_4.0-3   scales_0.5.0  backports_1.1.0  htmltools_0.3.6  [36] splines_3.4.1  colorspace_1.3-2 stringi_1.1.5  acepack_1.4.1  lazyeval_0.2.0  munsell_0.4.3 

回答

0

的RStudio文件名完成是基於當前工作目錄,即getwd()正如你已經確定。

編織Rmd文件時,包含Rmd文件的目錄將用作工作目錄。所以當您在./R中找到您的Rmd文件時,這將成爲您的工作目錄。

最簡單的解決方案是讓您在開發Rmd文件時將工作目錄更改爲./R

有一些選項可供您調查。 RStudio使用rmarkdown軟件包中的render。見例如?rmarkdown::render;看看knit_root_dir。 這也爲您提供knitr文檔

knit::opts_knit$set(root.dir='../') 

編輯:這似乎是RStudio(訴1.0.136)是足夠聰明的認識到,knitr文件將根據針織從其目錄,因此使用自動完成目錄,而不是getwd()

+0

這就是我的想法,但在我的情況是不正確的。在Rstudio的軟件包項目中,包含文件的主目錄是「./R」,而「getwd()」文件夾是「./」。 如果.Rmd在「./R」中,那麼當我運行getwd()'文件夾時,就是「./」。另外,當我編織它時,'getwd()'文件夾也是「./」! 這只是完成而已。對於每個自動完成文件名,我必須添加「./R」才能使文件編織或運行所有塊。 我認爲你之前說的話可能是真的,但不再是我的Rstudio版本(1.0.143) - 這很好。 – Courvoisier

+0

在一個軟件包項目中,'getwd()'仍然可以是任何東西。 RStudio *默認*到軟件包根目錄。根據我的經驗,RStudio在'getwd()'中爲R文件完成文件完成,但對於Rmd文件,它將其基於Rmd文件的目錄,而不管工作目錄如何。 – MrGumble

+0

此外,如果您正在使用R軟件包,則Rmd文件不應位於./R,但例如./vignettes,./inst/extdata或./tools。 – MrGumble