当前位置: 首页 > article >正文

在vscode中使用R-1

参考我的上一篇博客:

https://blog.csdn.net/weixin_62528784/article/details/145092632?spm=1001.2014.3001.5501
这篇内容实际上就是上一篇博客的后续承接,既然都在vscode的jupyter中使用R了,实际上其实也能够直接在vscode中原生使用R的编辑器等;

效果上其实是与Rstudio差不多的;

1,vscode中R的配置:

参考上面插件的配置需求:

其中的这个R包还是那个问题,如果只是进入radian或者是R的传统终端安装的话,比较麻烦,还容易报错;

所以还是使用conda解决问题

注意还是回到r-jupyter这个环境

然后就是其他的一些在vscode中增强R使用的体验:

(1)首先就是radian,一个新的R的终端,见下;

R-debugger等在vscode中的拓展也都安装了,类似的拓展有:

还有一个:

(2)还有一个就是httpgd的R包:

实际上是用于处理R生成的图像的,

如果没有这个的话,实际上理论上绘图的话是会打开另外一个窗口的,但是使用httpgd的话,生成的图片实际上是会内嵌到vscode编辑器内部的;

最近在R内安装R包总是失败,还是使用conda

2,配置新的R终端:radian
https://github.com/randy3k/radian

安装相关要求:

# install released version
pip3 install -U radian

# to run radian
radian

目前是在r-jupyter环境中安装的,所以无论是all in jupyter的时候需要切换到该环境以及使用该环境的R内核;

如果要使用R终端的话,也需要切换进入到该环境中

只是个终端,实际上命令是一致的:

可以修改一下alias:

总之R就是进入传统终端,r是进入radian终端

当然上面的只能在r-jupyter环境中使用:

但是我终端是想在所有环境中都使用,所以可以将上面的这个radian添加到环境变量中,或者是直接使用alias,将小r修改为上面r-jupyter环境中的radian,

当然也可以在后面的终端修改中设置为默认开启radian的新终端而不是旧的传统的终端;

(1)对该终端的进一步设置:

参考:https://github.com/randy3k/radian/issues/268

在用户主目录下创建该文件,然后使用;
(2)以下是每一项设置的具体翻译和解释:

# 不要复制整个配置,只需指定你需要的内容!
# 参见 https://pygments.org/styles
# 有关支持的颜色方案的列表,默认方案是 "native"
options(radian.color_scheme = "native")
  • 翻译:不需要复制整个配置,直接指定需要的内容。可以访问指定链接查看所有支持的样式,默认颜色方案为“本地”。
  • 解释:设置终端的色彩模式,方便用户在命令行中识别信息。
  • 颜色方案参考:https://pygments.org/styles/

# 选择编辑模式,默认为“emacs”或“vi”
options(radian.editing_mode = "emacs")
  • 翻译:选择编辑模式,可以为“emacs”(默认)或“vi”。
  • 解释:定义用户在命令行中使用的文本编辑模式。不同模式有不同的快捷键和操作方式。
# 在vi插入模式中启用各种emacs绑定
options(radian.emacs_bindings_in_vi_insert_mode = FALSE)
  • 翻译:在vi模式的插入模式中启用emacs的键绑定。
  • 解释:如果设置为TRUE,用户在vi插入模式中可以使用emacs的快捷键;若设置为FALSE,则使用vi的方式。
# 在radian.editing_mode是`vi`时显示vi模式状态
options(radian.show_vi_mode_prompt = TRUE)
  • 翻译:当编辑模式为“vi”时,显示当前模式状态。
  • 解释:帮助用户了解当前处于vi的哪种模式(如正常模式或插入模式)。
options(radian.vi_mode_prompt = "\033[0;34m[{}]\033[0m ")
  • 翻译:设置vi模式的提示符。
  • 解释:自定义在vi模式下显示的提示符样式,通过颜色和格式标识当前模式。
# 对换行行进行缩进
options(radian.indent_lines = TRUE)
  • 翻译:对继续行进行缩进。
  • 解释:设置代码缩进,便于阅读和区分不同语句块。
# 自动匹配括号和引号
options(radian.auto_match = TRUE)
  • 翻译:启用括号和引号的自动匹配。
  • 解释:在输入时自动补全对应的括号或引号,提高代码输入效率。
# 启用[prompt_toolkit](https://python-prompt-toolkit.readthedocs.io/en/master/index.html)的[`auto_suggest`功能](https://python-prompt-toolkit.readthedocs.io/en/master/pages/asking_for_input.html#auto-suggestion)
# 这个选项仍在实验阶段,已知会破坏python提示,使用时需谨慎
options(radian.auto_suggest = FALSE)
  • 翻译:启用提示工具库的自动建议功能。
  • 解释:该功能允许在输入时提供建议,处于实验阶段,可能会影响提示系统的正常运行。
# 高亮匹配的括号
options(radian.highlight_matching_bracket = FALSE)
  • 翻译:高亮显示匹配的括号。
  • 解释:设置为TRUE时,高亮匹配的括号,便于查看代码结构。
# 自动缩进新行和大括号
options(radian.auto_indentation = TRUE)
options(radian.tab_size = 4)
  • 翻译:自动为新行和大括号进行缩进,并设定制表符大小为4。
  • 解释:提高代码格式化的美观度和可读性。
# 输入时弹出补全
options(radian.complete_while_typing = TRUE)
  • 翻译:在输入时弹出补全建议。
  • 解释:提高代码书写效率,快速填充可能的命令或变量。
# 触发自动补全的前缀最小长度
options(radian.completion_prefix_length = 2)
  • 翻译:设定触发自动补全的最小前缀长度为2。
  • 解释:用户输入时,需要至少输入两个字符后才会显示补全选项。
# 超过时间取消补全的超时设置(以秒为单位)
# 设置为0则禁用超时
options(radian.completion_timeout = 0.05)
  • 翻译:设置完成选项的超时,超过0.05秒则取消。
  • 解释:防止补全操作过长时间阻塞用户的输入。
# 在函数参数补全中在等号两边添加空格
options(radian.completion_adding_spaces_around_equals = TRUE)
  • 翻译:在函数参数补全中,在等号周围添加空格。
  • 解释:为了提高代码的整洁度和可读性,自动在参数赋值时添加空格。
# 根据终端宽度自动调整R缓冲区大小
options(radian.auto_width = TRUE)
  • 翻译:根据终端宽度自动调整R的缓冲区大小。
  • 解释:增强用户在不同环境下的使用体验,避免内容溢出。
# 提示符之间插入新行
options(radian.insert_new_line = TRUE)
  • 翻译:在提示符之间插入新的行。
  • 解释:改善输出格式,使多个提示符之间有分隔行。
# 最大历史记录数
options(radian.history_size = 20000)
  • 翻译:设置最大历史记录数为20000。
  • 解释:定义可存储的最大命令历史条目以供查询。
# 存储全局历史的路径,环境变量将被展开
# 在Windows中,“~”展开为 %USERPROFILE% 或 %HOME%
options(radian.global_history_file = "~/.radian_history")
  • 翻译:指定全局历史记录文件的位置,路径中会自动扩展环境变量。
  • 解释:用户的命令历史记录会保存在这个文件中。
# 本地历史记录的存储文件名,如果当前工作目录下存在该文件,则使用它替代全局历史记录
options(radian.local_history_file = ".radian_history")
  • 翻译:指定本地历史记录文件名。
  • 解释:如果当前目录下存在此文件,则会在本地保存历史,而非全局文件。
# 使用历史搜索(emacs模式下 ctrl-r/ctrl-s)时不显示重复结果
options(radian.history_search_no_duplicates = FALSE)
  • 翻译:在历史搜索中不显示重复结果。
  • 解释:可以选择是否允许在重复搜索历史命令时继续显示相同的命令。
# 在历史搜索中忽略大小写
options(radian.history_search_ignore_case = FALSE)
  • 翻译:在历史搜索时不区分大小写。
  • 解释:设置为TRUE时,搜索可以不考虑输入的字母大小写。
# 不将调试浏览器命令(如 `Q`)保存在历史记录中
options(radian.history_ignore_browser_commands = TRUE)
  • 翻译:忽略调试浏览器命令的历史记录。
  • 解释:一些调试命令不需要记录,避免历史记录过于杂乱。
# 为不同模式自定义提示符
options(radian.prompt = "\033[0;34mr$>\033[0m ")
options(radian.shell_prompt = "\033[0;31m#!>\033[0m ")
options(radian.browse_prompt = "\033[0;33mBrowse[{}]>\033[0m ")
  • 翻译:自定义不同模式下的提示符。
  • 解释:根据不同操作模式设置不同的提示符样式,便于区分。
# stderr颜色格式
options(radian.stderr_format = "\033[0;31m{}\033[0m")
  • 翻译:设置标准错误输出的颜色格式。
  • 解释:使错误信息的显示更加直观。
# 启用reticulate提示并触发`~`
options(radian.enable_reticulate_prompt = TRUE)
  • 翻译:启用reticulate提示。
  • 解释:支持R和Python之间的互操作性,便于在R中调用Python代码。

部分需要再调整

3,其他的一些个性化设置:
(1)快捷键设置:

其中原始的ctrl+l是默认使用的终端清除命令,

然后新增的两个命令就是R中常用的执行某行,以及tidyverse中常用的%>%符号;


第一个快捷键定义部分

{
    "key": "ctrl+shift+m",
    "command": "editor.action.insertSnippet",
    "when": "editorTextFocus && editorLangId == 'r'",
    "args": {
        "snippet": " %>% "
    }
}

完整解释

  • "key": "ctrl+shift+m"
    • 定义了快捷键组合。这里表示当用户同时按下Ctrl + Shift + M时,会触发相应的命令。
  • "command": "editor.action.insertSnippet"
    • 指定了快捷键执行的命令。这里的editor.action.insertSnippet表示插入代码片段(snippet)。
  • "when": "editorTextFocus && editorLangId == 'r'"
    • 定义了快捷键触发的条件:
      • editorTextFocus:当编辑器区域当前处于焦点时(也就是当前鼠标在编辑器中)。
      • editorLangId == 'r':只有当前文件语言是R(R语言文件)时,快捷键生效。
    • 这两个条件结合起来指明:只有当编辑器焦点处于R语言文件时,按下Ctrl + Shift + M才会触发此快捷键。
  • "args": { "snippet": " %>% " }
    • 这里定义了执行命令时的参数。"snippet": " %>% "表示在编辑器中插入字符串%>%
    • %>%是R语言中常用的管道操作符(来自tidyverse包)。这个快捷键提升了在使用dplyr等包时输入的效率。

第二个快捷键定义部分

{
    "key": "ctrl+enter",
    //"command": [ "python.execSelectionInTerminal", "cursorDown" ],
    "command": "macros.pythonExecSelectionAndCursorDown",
    "when": "editorTextFocus && editorLangId == 'python'"
}

完整解释

  • "key": "ctrl+enter"
    • 定义了快捷键组合。这里表示按下Ctrl + Enter时会触发相应的命令,通常这是用来快捷执行代码的。
  • // "command": [ "python.execSelectionInTerminal", "cursorDown" ],
    • 这一行是注释,表示历史上可能曾用过的命令定义或备选内容,因为加了//前缀,它不会被解析为代码。目前这行代码已被注释不会执行。
    • 被注释掉的命令逻辑可能是:执行选中的Python代码片段后,将光标移到下一行。
  • "command": "macros.pythonExecSelectionAndCursorDown"
    • 这是当前生效的命令,表示执行宏操作pythonExecSelectionAndCursorDown
    • 这个宏意味着:运行选定的Python代码并将光标移到下一行,以便快速继续编写或运行下一部分代码。
  • "when": "editorTextFocus && editorLangId == 'python'"
    • 定义触发快捷键的条件:
      • editorTextFocus:当前编辑器区域具有焦点时。
      • editorLangId == 'python':当前文件是Python文件时。
    • 这两个条件结合起来指明:只有在编辑Python文件时,按下Ctrl + Enter快捷键才有作用。

额外说明

  • 注意:快捷键与命令之间是绑定的,但能否触发还需要满足when条件,这些条件确保快捷键只在特定情况下生效。
  • 对于R和Python的快捷键定义,分别是为了方便插入R语言的管道符号%>%和快速运行Python代码。

如果上面的快捷键跟电脑上的其它软件有冲突,则应做相应的修改

(2)vscode中的R拓展插件的一些设置:

首先是R终端交互的设置:

设置为radian的安装路径,也就是前面type radian,在all in one那个环境中


如果我上面没有设置成那个样子的话,也就是没有设置为radian的话:

那我再打开一个R终端的话,效果就是下面这种老旧的经典的终端,

所以我在上面的Rterm设置之后,我如果要随时打开一个R的终端,效果就是radian的新终端

另外就是下面这个最好也勾选上:搭配radian

总体而言:在vscode中使用R终端,无论是shell中R进入(或r进入radian),

还是ctrl+shift+p进入vscode中创建

或者是右下角

在进入R终端的时候:

我可以在vscode中同时开很多个R的 console,然后可以同时运行很多不同的任务,

这一点是和Rstudio不一样的:
因为Rstudio编辑器的进程是和终端的进程是绑定在一起的,相同的一个进程,不能用很多的R的console

(3)将httphd作为图片显示器

见前面,使用conda安装好了httpgd这个R包,然后就是设置中修改

同时也可以作为帮助文档的查看

(4)如何快速重启vscode:

CTRL+ENTER执行过程中遇到了问题,不能看到终端R打开执行R脚本中的任务

参考:https://blog.csdn.net/weixin_44090706/article/details/129343450

是R tools插件的冲突,如果想要卸载这个插件再执行R脚本的话:

每次插件处理前后都要重启

(5)如果是Rmd文件:

vscode本身是能够新建Rmd文件,并preview预览的

但是我们可以看到,并没有实际运行的按钮以及绘图效果:
参考:
https://blog.csdn.net/m0_54882482/article/details/129723469

设置里找:

原本的设置是这样的,所以没有渲染成功,也就是没有正确识别

修改如下:

现在回来再看就有了:

解决了在右边能够通过httpgd可视化绘制出来的图的效果

但是我是想在Rmd中预览这个效果

另外vscode里可以混合语言编程,所以是可以在Rmd文件中混合使用R以及python代码的;

就像我上一篇博客在jupyter notebook中混合使用python以及R语言一样

(6)然后就是R的实际使用方式了:
①进入R终端写代码:见上,有很多方式可以进入终端,常见的就是在shell中进入R

②新建一个R语言的文本文件:

可以是r文件或者是Rmd文档

③或者是参考我的上一篇博客:

python、r all in one jupyter,也就是在jupyter中使用R内核

4,总之效果就是:

留个悬念:如何预览Rmd文件以及绘图执行的效果?

参考:
https://blog.yfei.page/cn/2020/12/vscode-r/

https://blog.csdn.net/yijiaobani/article/details/124009210

https://www.bilibili.com/video/BV1ZS4y1X73w/


http://www.kler.cn/a/504111.html

相关文章:

  • 如何解决Webview和H5缓存问题,确保每次加载最新版本的资源
  • 【Uniapp-Vue3】showLoading加载和showModal模态框示例
  • 分多个AndroidManifest.xml来控制项目编译
  • Spring bean的生命周期和扩展
  • Linux--CPU系统资源命令查看--详解
  • Facebook 隐私变革之路:回顾与展望
  • “代驾”小程序查漏补缺
  • 【漫话机器学习系列】048.编码有序类别特征(Encoding Ordinal Categorical Features)
  • C#里使用libxl设置EXCEL里公式计算的例子
  • Golang——并发控制
  • macos遇到You have not agreed to the Xcode license agreements.
  • SpringBoot之OriginTrackedPropertiesLoader类源码学习
  • 网管平台(进阶篇):路由器的管理实践
  • 华三S6520交换机配置console和ssh
  • 【数据结构学习笔记】19:跳表(Skip List)
  • 浅谈计算机网络02 | SDN控制平面
  • 一个使用 Golang 编写的新一代网络爬虫框架,支持JS动态内容爬取
  • 【漫话机器学习系列】047.指数型线性单元(Exponential Linear Units,ELU)
  • 1.4 给应用添加service,执行扩容和滚动更新
  • TDSQL 内存占用解析一例
  • Golang|单机并发缓存
  • 24. 【.NET 8 实战--孢子记账--从单体到微服务】--记账模块--预算扣除、退回、补充
  • 华为2024嵌入式研发面试题
  • Adobe与MIT推出自回归实时视频生成技术CausVid。AI可以边生成视频边实时播放!
  • Oracle 终止正在执行的SQL
  • 下载导出Tomcat上的excle文档,浏览器上显示下载