Rstudio需要通过RSession → C++ → Java → WebSocket → html+js的传递链将R的内核与大家可交互式操作的Rstudio进行信息传递
一,如何连接终端和Rstudio-server
参考:
二,Rstudio-server卡顿的解决方案
ping 你的Rstudio-server的域名(不要加上端口) #我这里就是zerotier中的内网域名
我自己ping了一下zerotier中内网的服务器ip
延迟在10ms左右,并且没有解包丢失
确实我在网页端登入经常被登出,需要重新登入
auth-timeout-minutes=<分钟> # 设置用户会话的超时时间。用户在此时间内无活动将被自动登出。
auth-stay-signed-in-days=<天> # 设置“保持登录”功能的持续天数。
rsession-memory-limit-mb=<数字> # 限制每个R会话可以使用的最大内存量(以MB为单位)。
我也随意设置了一下:
# 在终端中运行
/usr/bin/R --no-save < Biomamba.R
#或者参考我的上一篇博客,找到which R中的执行路径,然后进行运算
在Linux终端中运行R脚本的方法是使用一条命令 /usr/bin/R --no-save < Biomamba.R
。让我们分解一下这条命令:
/usr/bin/R
:这是R程序的路径,类似于告诉电脑从哪个地方找到R软件来运行。--no-save
:这个选项表示脚本运行结束后,不保存任何中间结果。这样可以节省内存,特别是在处理大数据时。< Biomamba.R
:这个符号<
将文件Biomamba.R
的内容输入到R程序中。也就是说,R程序会读取这个文件并执行其中的代码。
总之,这条命令的作用是运行名为 Biomamba.R
的R脚本,并且在结束后不保存工作结果。对于需要多次运行或处理复杂数据的用户,这种方法更加高效和稳定。
此处直接使用快捷键ctrl+shift+N即可:
sudo systemctl reboot
参考:
https://mp.weixin.qq.com/s/h01R7cbfGEvcaet8BSz7jg
三,Rstudio-server为什么总是登不进去
ps -ef | grep "/usr/lib/rstudio-server/bin/rsession -u $(whoami)" | grep -v grep | awk '{print $2}' | xargs kill -15
# 新版 rstudio 的 session 文件的存放位置
ls ~/.local/share/rstudio/sessions/active
# 如果有内容,则删除
rm -rf ~/.local/share/rstudio/sessions/active
# 旧版 rstudio 的 session 文件的存放位置
ls ~/.rstudio/sessions/active/session-*
# 如果有内容则删除
rm -rf ~/.rstudio/sessions/active/session-*
# 这里也可能有大量的临时文件需要删除:
rm /tmp/
参考:
https://mp.weixin.qq.com/s/4a1rfEDKl2G5ToxxMnpB2Q
四,在Rstudio中使用同一个R包的不同版本
# 查看系统中配置好的 libpath 输出,按照优先级从高到低的方式输出,注意在R中输出
.libPaths()
# 示例输出:
[1] "/home/txb/R/x86_64-pc-linux-gnu-library/4.2"
[2] "/usr/local/lib/R/site-library"
[3] "/usr/lib/R/site-library"
[4] "/usr/lib/R/library"
1,实现方式 1: 将 R 包安装在 rpackage 目录并配置
# 将包安装在指定的 libpath 示例:
# 注意:libpath 必须在系统中存在,如果不存在,需要新建对应的目录:mkdir -p /home/txb/rpackage
# 将 R 包下载在指定目录命令示例:
remotes::install_github("jlmelville/uwot", lib="/home/txb/rpackage")
install.packages("xxx", lib="/home/txb/rpackage")
devtools::install_github("xxx/xxx", lib="/home/txb/rpackage")
BiocManager::install("xxx", lib="/home/txb/rpackage")
# 查看未添加 libpath 之前 uwot 的版本
library("uwot")
packageVersion("uwot")
# 向 R 包的 libpaths 中新增一个 libpath,并将它放在第 1 个元素 (最高优先级)
.libPaths(c("/home/txb/rpackage",.libPaths()))
# 查看添加 libpath 之后 uwot 的版本
library("uwot")
packageVersion("uwot")
好的,下面是对每一行代码的详细解释:
# 将包安装在指定的 libpath 示例:
# 注意:libpath 必须在系统中存在,如果不存在,需要新建对应的目录:mkdir -p /home/txb/rpackage
这部分是注释,说明以下代码的目的是将 R 包安装到指定的库路径中,并提醒用户在安装前需要确保该路径已经存在。如果不存在,用户需要手动创建这个目录。
# 将 R 包下载在指定目录命令示例:
remotes::install_github("jlmelville/uwot", lib="/home/txb/rpackage")
这行代码使用 remotes
包的 install_github
函数从 GitHub 上下载并安装 jlmelville/uwot
包,并指定安装目录为 /home/txb/rpackage
。lib
参数用于指定 R 包的安装路径。
install.packages("xxx", lib="/home/txb/rpackage")
这行代码用于安装名为 xxx
的 R 包。通过 lib
参数,包将在 /home/txb/rpackage
目录下安装。
devtools::install_github("xxx/xxx", lib="/home/txb/rpackage")
这行代码使用 devtools
包中的 install_github
函数从 GitHub 上安装名为 xxx/xxx
的包,同样指定安装在 /home/txb/rpackage
。
BiocManager::install("xxx", lib="/home/txb/rpackage")
这行代码通过 BiocManager
包来安装生物信息学相关的包 xxx
,并也是指定安装路径为 /home/txb/rpackage
。
# 查看未添加 libpath 之前 uwot 的版本
library("uwot")
packageVersion("uwot")
这段代码首先通过 library
函数加载 uwot
包,然后使用 packageVersion
函数来查看当前已加载的 uwot
包的版本。在添加新的 libpath 之前执行这段代码,以便后续进行对比。
# 向 R 包的 libpaths 中新增一个 libpath,并将它放在第 1 个元素 (最高优先级)
.libPaths(c("/home/txb/rpackage",.libPaths()))
这一行代码使用 .libPaths()
函数来增加一个新的库路径 /home/txb/rpackage
。这个路径被放在了库路径列表的最前面,意味着 R 在加载包时会优先查找这个路径。
# 查看添加 libpath 之后 uwot 的版本
library("uwot")
packageVersion("uwot")
最后这段代码再次加载 uwot
包并检查其版本。此时,由于新添加了 libpath,R 可能会找到更新版本的 uwot
包或确认已经加载的版本。
整体而言,这个代码段的功能是将 R 包安装至特定的文件夹,并在会话中调整库路径,以便能够使用这些安装的包。
实际测验:
或许我可以拿一个比较旧的版本来测试:
查询这个R包:
可以在第一个参数传入的时候具体设置@release
刚开始试了一下没有成功,uwot最新是0.2.2版本的,更改.libpaths之后还是0.2.2,
后来经LLM提醒:
# 查看包是否已安装并确认版本
installed.packages(lib.loc = "/home/txb/rpackage")
# 卸载已加载的包
detach("package:uwot", unload = TRUE)
# 设置.libPaths
.libPaths(c("/home/txb/rpackage", .libPaths()))
# 查看版本
library("uwot")
packageVersion("uwot")
测试成功
2,实现方式 2:使用 conda 安装 R 包并配置 libpath
# 使用 conda 安装指定版本的 R 包
## 创建 conda 环境
conda create -n r-reticulate r-uwot==0.1.11 -y
conda activate r-reticulate
# 配置 libpath
.libPaths(c("/home/txb/miniconda3/envs/r-reticulate/lib/R/library", .libPaths()))
# 查看此时 R 找到的第 1 个 R 包的版本。
library("uwot")
packageVersion("uwot")
这个思路idea其实很自然mamba search之后,寻找对应R包版本,创建该环境,
然后使用.libpaths配置更新优先级(和上面1法一致),但是注意是
miniconda3/envs/该环境/lib/R/library
推文给出的例子是:
.libPaths(c("/home/txb/rpackage",.libPaths()))
library("uwot")
packageVersion("uwot")
.libPaths(c("/home/txb/miniconda3/envs/r-reticulate/lib/R/library", .libPaths()))
library("uwot")
packageVersion("uwot")
# Seurat 中会 import uwot,此时 uwot 无法 unload,想要切换 uwot 版本,有两种方式。
# 1. 将 Seurat unload
# 2. “Start New Session”,然后再选中想要使用的 uwot 版本 (推荐)
library("Seurat")
detach("package:Seurat", unload = TRUE)
# 让 libpath 永久生效,将相关命令写入到文件
file.edit("~/.Rprofile")
加载指定libpath下的R包
# lib 参数指定 libpath,即从那个目录下加载 R 包
library("remotes", lib = "xxx")
查看已经加载的R包
(.packages())
参考: