如何在Rstudio中的同一Rscript中的函数之间进行分区?

如何在Rstudio中的同一Rscript中的函数之间进行分区?,r,R,我正在用Rstudio在R中编写一个大函数。此功能包括应分开的不同部分。我使用cmd+shift+R为每个部分获取标题。这是有帮助的,但我真的需要一个分区作为一个框架或框。使用cmd+shift+R,仅对简短标题有帮助 这里有一些代码 分割 标题和一些描述在这里 分割 我怎么能用捷径把那个分区用掉?也就是说,我需要一个框架,包括关于以下部分的一些信息。如何使用Rstudio中的加载项来执行此操作 如果您有一个需要构造的大型函数,我建议将其分解为多个子函数。通过这一点,您可以实现很多: 视觉分离

我正在用Rstudio在R中编写一个大函数。此功能包括应分开的不同部分。我使用cmd+shift+R为每个部分获取标题。这是有帮助的,但我真的需要一个分区作为一个框架或框。使用cmd+shift+R,仅对简短标题有帮助

这里有一些代码

分割

标题和一些描述在这里

分割


我怎么能用捷径把那个分区用掉?也就是说,我需要一个框架,包括关于以下部分的一些信息。如何使用Rstudio中的加载项来执行此操作

如果您有一个需要构造的大型函数,我建议将其分解为多个子函数。通过这一点,您可以实现很多:

视觉分离 由于范围有限,错误更少 您可以单独测试每个部件 你可以重复使用零件 每个子函数都有一个描述性名称=>更少的注释 父函数一目了然地讲述了整个过程 您不得不用逻辑术语重新思考代码 这将导致更好的体系结构
@jaySf的建议似乎真的很有用,或者我不明白你说的盒子是什么意思

Rstudio会将带有多个--or===的每条注释行视为标题/章节。如果您不希望该行被视为一个部分,因为它是您的框的框架,只需以结尾

顺便说一下,在R studio中旋转R脚本Ctrl+Shif+K时,我使用/*和*/使knitr忽略这些标记之间的所有内容

# /* 
# ----------------------------- Title of the section ---------------------------
# */

# =================================================================================  #
#
# Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non risus. Suspendisse 
# lectus tortor, dignissim sit amet, adipiscing nec, ultricies sed, dolor. Cras elementum 
# ultrices diam. Maecenas ligula massa, varius a, semper congue, euismod non, mi. 
# Proin porttitor, orci nec nonummy molestie, enim est eleifend mi, non fermentum 
# diam nisl sit amet erat. Duis semper. Duis arcu massa, scelerisque vitae, consequat 
# in, pretium a, enim. Pellentesque congue. Ut in risus volutpat libero pharetra tempor. 
# Cras vestibulum bibendum augue. Praesent egestas leo in pede. Praesent blandit odio eu 
# enim. Pellentesque sed dui ut augue blandit sodales. Vestibulum ante ipsum primis in 
# faucibus orci luctus et ultrices posuere cubilia Curae; Aliquam nibh. Mauris ac mauris 
# sed pede pellentesque fermentum. Maecenas adipiscing ante non diam sodales hendrerit.
# 
# =================================================================================  #


# /*
# ================================================================================= #
# 
# -----------------------------   Other title  -------------------------------  
#
# Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non risus. Suspendisse 
# lectus tortor, dignissim sit amet, adipiscing nec, ultricies sed, dolor. Cras elementum 
# ultrices diam. Maecenas ligula massa, varius a, semper congue, euismod non, mi. 
# Proin porttitor, orci nec nonummy molestie, enim est eleifend mi, non fermentum 
# diam nisl sit amet erat. Duis semper. Duis arcu massa, scelerisque vitae, consequat 
# in, pretium a, enim. Pellentesque congue. Ut in risus volutpat libero pharetra tempor. 
# Cras vestibulum bibendum augue. Praesent egestas leo in pede. Praesent blandit odio eu 
# enim. Pellentesque sed dui ut augue blandit sodales. Vestibulum ante ipsum primis in 
# faucibus orci luctus et ultrices posuere cubilia Curae; Aliquam nibh. Mauris ac mauris 
# sed pede pellentesque fermentum. Maecenas adipiscing ante non diam sodales hendrerit.
# 
# =================================================================================  #
# */
# 
您可以通过Rstudio加载项在Rstudio中自动执行此操作

在几个基本步骤中:

1使用devtools创建新的包结构

setwd("~/stats/Rpackages")
devtools::create('MyRstudioAddins')
2将以下函数保存在包的R目录中名为'insertTitle.R'的R脚本中

#' Insert title and box
#'
#' @export
insertTitle <- function() {
    rstudioapi::insertText("# /* 
# ----------------------------- Title of the section ---------------------------
# */

# =================================================================================  #
#
# Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non risus. Suspendisse 
# lectus tortor, dignissim sit amet, adipiscing nec, ultricies sed, dolor. Cras elementum 
# ultrices diam. Maecenas ligula massa, varius a, semper congue, euismod non, mi. 
# 
# =================================================================================  #
")
}
4在R中安装您的软件包

install.packages("~/stats/Rpackages/MyRstudioAddins/", repos = NULL, type="source")
5在Rstudio中,转到“工具/修改键盘快捷键”,如果找不到快捷键,请为命令搜索加载项添加所需的快捷键

有关Rstudio加载项的更多信息,请参阅

注:正如其他人所建议的,将大功能分解为小功能是个好主意。但是,节、标题和框对于组织有函数或没有函数的代码仍然很有用

编辑:通过更新的问题,我发现它没有解决OP的问题,把它留在这里存档

我建议你听从Blcknx的建议,重新考虑你的结构

如果不能,可以使用源代码拆分代码,以便在多个选项卡中打开不同部分:

# setup
write("x <- 1;print(x)","part1.R") # create a dummy file
write("x <- x+1;print(x)","part2.R")
file.edit("part1.R","part2.R") # will open it in a R studio tab

long_fun <- function(){
  source("part1.R",local=TRUE)
  source("part2.R",local=TRUE)
}

long_fun()
# [1] 1
# [1] 2

x
# Error: object 'x' not found

# clean up
file.remove("part1.R","part2.R")

@jaySf我需要放在相框里你是怎么自动做到的。当我使用cmd+shift+r时,我只得到----行。我需要自动使用===。@Silver_80 cat--?在@jaySf comment上再次到阿拉巴马州查看Rstudio addins的更新答案…这是对addins的一个非常酷的介绍谢谢,因为我知道一旦安装了addin,您仍然需要加载函数,一个干净的解决方法是使用一个包含加载项函数的包并具有绑定:在dcf文件中使用_package::insertTitle,一个快速的解决方法是将insertTitle放入RProfile中,并可能将其重命名为.insertTitle,这样它就不会显示在ls中
# setup
write("x <- 1;print(x)","part1.R") # create a dummy file
write("x <- x+1;print(x)","part2.R")
file.edit("part1.R","part2.R") # will open it in a R studio tab

long_fun <- function(){
  source("part1.R",local=TRUE)
  source("part2.R",local=TRUE)
}

long_fun()
# [1] 1
# [1] 2

x
# Error: object 'x' not found

# clean up
file.remove("part1.R","part2.R")