Rstudio-server常见问题

Rstudio需要通过RSession → C++ → Java → WebSocket → html+js的传递链将R的内核与大家可交互式操作的Rstudio进行信息传递

一,如何连接终端和Rstudio-server

参考:

https://mp.weixin.qq.com/s?__biz=MzAwMzIzOTk5OQ==&mid=2247524106&idx=3&sn=2a708129b846cbd6bd2fade3495afbd0&chksm=9a89afcc5d95c96cee797de6c8f43c21d687464641beb7b375e1d66bf7bab7eb73bdbc1ba2ad&scene=126&sessionid=1734330549#rd

二,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。让我们分解一下这条命令:

  1. /usr/bin/R:这是R程序的路径,类似于告诉电脑从哪个地方找到R软件来运行。
  2. --no-save:这个选项表示脚本运行结束后,不保存任何中间结果。这样可以节省内存,特别是在处理大数据时。
  3. < 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/rpackagelib 参数用于指定 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())

参考:

https://mp.weixin.qq.com/s/30aG8IQh9lHZBRpvsGoatA

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值