惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

D
Darknet – Hacking Tools, Hacker News & Cyber Security
V
Vulnerabilities – Threatpost
Cloudbric
Cloudbric
G
GRAHAM CLULEY
S
Securelist
Schneier on Security
Schneier on Security
Help Net Security
Help Net Security
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Project Zero
Project Zero
Spread Privacy
Spread Privacy
P
Privacy International News Feed
C
Cyber Attacks, Cyber Crime and Cyber Security
Cisco Talos Blog
Cisco Talos Blog
T
Tailwind CSS Blog
博客园_首页
有赞技术团队
有赞技术团队
Simon Willison's Weblog
Simon Willison's Weblog
Stack Overflow Blog
Stack Overflow Blog
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Latest news
Latest news
T
Tor Project blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Attack and Defense Labs
Attack and Defense Labs
www.infosecurity-magazine.com
www.infosecurity-magazine.com
O
OpenAI News
J
Java Code Geeks
T
Tenable Blog
K
Kaspersky official blog
AWS News Blog
AWS News Blog
S
Security @ Cisco Blogs
The GitHub Blog
The GitHub Blog
T
Threatpost
月光博客
月光博客
H
Heimdal Security Blog
Security Latest
Security Latest
The Hacker News
The Hacker News
Y
Y Combinator Blog
A
Arctic Wolf
Apple Machine Learning Research
Apple Machine Learning Research
C
Cisco Blogs
美团技术团队
Microsoft Security Blog
Microsoft Security Blog
Hugging Face - Blog
Hugging Face - Blog
T
The Blog of Author Tim Ferriss
C
CERT Recently Published Vulnerability Notes
D
Docker
Google Online Security Blog
Google Online Security Blog
D
DataBreaches.Net
V
Visual Studio Blog
H
Help Net Security

ChrAlpha's Blog

嵌套 Devcontainer:放心 dangerously skip permissions 无看管 Agent Coding | ChrAlpha's Blog AI Agent 病毒:从 OpenClaw 病毒式成功到成为病毒 | ChrAlpha's Blog 写给非科班的 HPC 无痛上手:在超算节点上使用 VS Code | ChrAlpha's Blog Tailscale 配合 Mihomo(Clash.Meta) TUN/Quantumult X VPN 共存使用技巧 | ChrAlpha's Blog Pixel SIM 里外配合实践:大陆 SIM + 外地 eSIM WiFi Calling | ChrAlpha's Blog 因 Magisk 模块致 Pixel 8 卡死在 Fastboot 的救砖记录 | ChrAlpha's Blog 用 Thanox 在不支持地区启用 Google 地图时间轴(位置记录) | ChrAlpha's Blog 接纳不等于忍受,为舒服使用 Windows 11 的若干优化调整记录 | ChrAlpha's Blog Win10 生命末尾、Win11 是否有必要执着于 LTSC? | ChrAlpha's Blog 再谈在 GitHub Issues 写作,顺带算是样式开源
用 Conda 管理 R 环境并配合 VS Code 优化数据分析代码体验 | ChrAlpha's Blog
ChrAlpha · 2024-11-25 · via ChrAlpha's Blog

在使用 R 的很多时候,明显感觉 R 并不像一门编程语言,而是更像命令行中的 Excel。毕竟这门语言的设计初衷就是为了数据分析。对于从未接触编程的用户来说,通过 RStudio 一站式解决的烦人的环境配置等问题,做到上手即用。但是对于有编程经验的用户来说,RStudio 的许多功能──例如 Copilot、Intellisence、Linter、Git 集成等──相较于 VS Code 还是孱弱太多。

此外,虽然 R 语言也有 venv 的概念,将不同项目的依赖隔离开来,避免冲突,但是这和完全和 Conda 独立。而在实际分析中,R 的统计学习、可视化优势与 Python 的深度学习、更广的扩展性相辅相成,往往需要借助 reticulate(R 调用 Python)或 rpy2(Python 调用 R)同时使用两者。因此,也同 Python 一样,我移除了全局的 R 环境,完全使用 Conda 管理 R 以及其配套 Python 环境。

遗憾的是,VS Code 的 R 插件远不如 Python 插件那么强大,无法实现类似「Python: Select Interpreter」选择特定的 Conda 环境并激活对应位置的 R 环境。我们只能在 VS Code 中手动设置 PATH 以实现类似功能。

如果你在 WSL 中使用 R、RStudio Server,可以通过下面的命令卸载全局的 R 环境:

sudo rstudio-server stop
sudo apt remove rstudio-server -y
sudo apt remove -y r-base r-base-core r-recommended r-base-dev
sudo apt autoremove -y

R 的 APT 源可以先留着,反正不至于导致调用错误的 R 环境。

如果你是在 Windows 或 macOS 通过 RStudio 使用 R,直接通过 GUI 卸载 RStudio 和 R 即可。

Anaconda 文档中有关于在 Conda 中使用 R 的说明──Using R language with Anaconda,这其实是一个常见的用法。

你可以通过下面的命令创建一个全新包含 R 和常用包的环境:

conda create -n r_env r-essentials r-base

# micromamba 由 C 程序编写,速度更快
# https://mamba.readthedocs.io/en/latest/user_guide/micromamba.html
# micromamba create -n r_env r-essentials r-base

conda activate r_env

绝大多数 R 包也都可以通过 Conda 安装,包名前缀为 r-,例如 r-tidyverser-ggplot2等:

conda install r-tidyverse r-ggplot2

你可以在激活 Conda 环境的时候通过 which R 查看 R 的位置,后续配合 VS Code 时会用到。

如果有 RMarkdown 或者在 Jupyter Notebook 调用 R 的需求,需要安装 r-rmarkdownr-irkernel

conda install -c conda-forge r-rmarkdown r-irkernel

R 控制台连接 VS Code 需要 languageserver``,languageserver 同时会带有 R 的语法检查、代码格式化等功能。同样的,这个包可以通过 Conda 安装:

conda activate r_env
conda install -c conda-forge r-languageserver

同时 VS Code 的 R 插件也建议安装 radianhttpgd 以提升体验:

  • radian: 一个现代 R 控制台,修正了官方 R 终端的许多限制,并支持语法高亮和自动完成等许多功能
  • httpgd: 一个 R 软件包,用于提供一个图形设备,通过 HTTP 和 WebSockets 异步提供 SVG 图形。 VS Code R 扩展的交互式绘图查看器需要使用该软件包。
conda install -c conda-forge radian r-httpgd

注意这里的 radian 不需要再加 r- 前缀。

随后修改下述设置项:

{
  "r.bracketedPaste": true,
  "r.rterm.linux": "${userHome}/micromamba/envs/r_env/bin/radian",
  "r.rpath.linux": "${userHome}/micromamba/envs/r_env/bin/R",
  "r.rterm.mac": "${userHome}/micromamba/envs/r_env/bin/radian",
  "r.rpath.mac": "${userHome}/micromamba/envs/r_env/bin/R",
  "r.rterm.option": [
    "--no-save",
    "--no-restore",
    "--no-site-file",
    "--r-binary=${userHome}/micromamba/envs/r_env/bin/R"
  ],
  "r.libPaths": [
    "${userHome}/micromamba/envs/r_env/lib/R/library"
  ],
  "r.plot.useHttpgd": true,
  "[r]": {
    "editor.defaultFormatter": "REditorSupport.r"
  },
"files.associations": {
    "*.rmd": "rmd"
  },
}

这里路径只针对 Linux 和 macOS,Windows 请尽量在 WSL 中使用 R,WSL 下设置遵循 Linux。VS Code 路径并不认可 ~ 等变量,需要使用 ${userHome}VS Code 变量 代替。

  • r.rterm 用于指定 R 控制台的位置,r.rpath 用于指定 R 的位置,如果你选择 radian 作为 R 控制台,将前者指向 radian,后者仍然指向 R
  • r.rterm.option 用于指定 R 控制台的启动参数,最好加上 --r-binary 参数指定 R 环境的位置。
  • r.libPaths 用于指定 R 包的位置,如果全在 R 控制台中操作,不修改似乎也没问题。
  • r.plot.useHttpgd 用于指定是否使用 httpgd 展示图表,可以在 VS Code 中实现类似 RStudio 的交互式图表展示。
  • editor.defaultFormatter 用于指定 R 代码的格式化工具,这里使用 R 插件自带的格式化工具。
  • files.associations:VS Code 默认会将 .Rmd 文件识别为普通 Markdown 文件,这里需要单独指明

注意到这里通过各种 PATH 的设置,实现了选择特定的 Conda 环境并激活对应位置的 R 环境,建议在 User 设置一个通用的 R 环境,而在 Workspace 还可以设置单独特定的 R 环境,以实现不同项目使用不同的 R 且无需每次手动切。

关于 RMarkdown 的导出问题,虽然在 Conda 环境中安装 r-rmarkdown 会自动处理好依赖,例如 Pandoc 等。但是注意到上面也只是通过 PATH 的设置实现了 R 的环境切换,终端和其他地方并未真正激活相应的 Conda 环境,因此在 VS Code 中 Knit RMarkdown to PDF 可能发现找不到 Pandoc。

一般 TeX Live 和 Pandoc 这些文档工具,我已经在全局环境中安装一份。倘若非要用 Conda 环境中的版本可以通过修改 VS Code 的 r.rmarkdown.knit.command Knit 命令,在命令前面添加 RSTUDIO_PANDOC 环境变量,指向 Conda 环境中的 Pandoc 位置。但是这里我试过不能使用 ${userHome} 等变量,只能写绝对路径,这样就失去了通用性,不推荐这样做。

{
  "r.rmarkdown.knit.command": "Sys.setenv(RSTUDIO_PANDOC='/home/username/micromamba/envs/r_env/bin/pandoc'); rmarkdown::render"
}

如果你希望自行开启的 R 控制台也能连接 VS Code,可以通过用户目录下的 .Rprofile 文件设置初始化:

if (interactive() && Sys.getenv("RSTUDIO") == "") {
  Sys.setenv(TERM_PROGRAM = "vscode")
  source(file.path(Sys.getenv(
    if (.Platform$OS.type == "windows") "USERPROFILE" else "HOME"
  ), ".vscode-R", "init.R"))
}

并选择性勾选 r.alwaysUseActiveTerminal

版权信息

用 Conda 管理 R 环境并配合 VS Code 优化数据分析代码体验

本文作者
ChrAlpha

发布日期
2024-11-24

更新日期
2024-11-24

转载或引用本文时请遵守 CC BY-NC-SA 4.0 许可协议,注明出处、不得用于商业用途!