【问题标题】:Rstudio filename completion in rmarkdown .rmd filesrmarkdown .rmd 文件中的 Rstudio 文件名补全
【发布时间】:2018-02-22 00:34:07
【问题描述】:

在 Rstudio 版本 (1.0.143) 中。

我正在使用 Rstudio 包项目并在其中使用 Rmarkdown。所有代码文件都在 ./R 文件夹中。所有数据文件都在 ./Data 文件夹中。默认的getwd() 是父文件夹./(包含./R 和./Data)。

我使用 RStudio 中的文件补全工具,我认为它非常有用。但是在 .Rmd 文件中,它不能按预期工作。例如,这里有两种情况:

  • 在 .R 文件中,包含在 ./R 文件夹中。我打开括号和 相对于getwd(),完成工作符合预期 文件夹,即父文件夹。因此 ./R 中的文件“hello.R”将完成为 "./R/hello.R"

  • 在 .Rmd 文件中,也包含在 ./R 文件夹中。我开始一个 R 块。一世 打开括号,完成后没有给我“./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

【问题讨论】:

    标签: r rstudio r-markdown


    【解决方案1】:

    RStudio 文件名补全基于当前工作目录,即您自己确定的getwd()

    编织 Rmd 文件时,将包含 Rmd 文件的目录用作工作目录。因此,当在./R 中找到您的 Rmd 文件时,这将成为您的工作目录。

    最简单的解决方案是在开发 Rmd 文件时将工作目录更改为 ./R

    有一些选项供您调查。 RStudio 使用 rmarkdown 包中的render。参见例如?rmarkdown::render;看看knit_root_dir。 这也适用于您的 knitr 文档

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

    编辑: 看起来 RStudio (v. 1.0.136) 足够聪明,可以识别 knitr 文档将基于其目录进行编织,因此使用 that 目录中的自动完成,而不是 getwd()

    【讨论】:

    • 这就是我的想法,但在我的情况下它是不正确的。在 Rstudio 的包项目中,包含文件的主目录是“./R”,而 getwd() 文件夹是“./”。如果 .Rmd 在“./R”中,当我运行该块时,getwd() 文件夹是“./”。另外,当我编织它时,getwd() 文件夹也是“./”!只是完成被搞砸了。对于每个自动完成文件名,我必须添加“./R”,以便文件可以编织或运行所有块。我认为您所说的以前可能是真的,但现在不是我的 Rstudio 版本(1.0.143)——这很好。
    • 在一个包项目中,getwd() 仍然可以是任何东西。 RStudio defaults 到包根目录。根据我的经验,RStudio 的文件完成基于getwd() 用于 R 文件,但对于 Rmd 文件,它基于 Rmd 文件的目录,而不考虑工作目录。
    • 我按回车太快了,见编辑。让我尝试将我的 Rmd 文件移动到这些文件夹之一。也许那样我就不会有问题了。
    • 有没有人找到解决这个问题的方法?我有一个 ./code 中的 Rmd 文档,但是通过开头块中的一行将它设置为根目录 (.): knitr::opts_knit$set(root.dir = "../") 但是,当在 Rmd 文档中写入时分页查找文件时,即使控制台的工作目录设置为根目录,它仍然坚持从 ./code 目录开始。在 RStudio IDE 设置中以某种方式设置它会很好。
    • 对不起,我之前的评论太仓促了。 “../”确实表示父目录。
    猜你喜欢
    • 2021-10-03
    • 2020-06-05
    • 1970-01-01
    • 2012-07-20
    • 2017-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-12
    相关资源
    最近更新 更多