运行 R 内核时如何在 google Colab 中访问 shell

Posted

技术标签:

【中文标题】运行 R 内核时如何在 google Colab 中访问 shell【英文标题】:How to access the shell in google Colab when running the R kernel 【发布时间】:2021-12-29 15:44:48 【问题描述】:

当我将 Python 与 colab 一起使用时,您可以使用 !%%shell 之类的东西访问底层操作系统,例如 !ls 以列出文件。

当我将 colab 与 R 内核一起使用时,!%%shell 技巧不起作用。在这种情况下,有没有办法从 colab 调用 shell?

https://colab.research.google.com/#create=true&language=r

【问题讨论】:

不确定您是否对解决方法感兴趣,但您可以改用system2("ls", stdout = TRUE)(或list.files())。 好主意,如果没有更短的方法,这可能是最好的选择。至于list.files() 之类的东西,这正是我一直在做的事情(例如,download.file(...) 而不是wget 等)。 【参考方案1】:

有一个基本的 R 函数system,它允许你调用 Notebook 后面的 shell。由于 colab 抑制了标准输出,因此需要设置选项 intern = TRUE 以将结果视为 R 字符向量。为了正确显示换行符,我定义了一个名为 shell_call 的函数,它类似于 ipython 中的 !

shell_call <- function(command, ...) 
  result <- system(command, intern = TRUE, ...)
  cat(paste0(result, collapse = "\n"))


shell_call("ls -lah / | head")

【讨论】:

这基本上是我在评论中已经建议的(除了使用system - 请参阅?systemThis interface has become rather complicated over the years: see system2 for a more portable and flexible interface which is recommended for new code.)。 Ipythons ! 的行为更多的是函数system 而不是system2:你不能只写system2("ls -lah /", stdout = TRUE)。此外,它返回一个字符向量而不是格式化文本。这就是我定义函数!的原因 当然——我们可以用类似的方式为 system2 编写一个包装器,但我个人不想覆盖 R 中的逻辑运算符 ! 我将答案修改为不超载!【参考方案2】:

如here 所述,魔法的实现是内核特定的:

致 Jupyter 用户:魔术是 IPython 特有的并由 IPython 提供 核心。 Magics 是否在内核上可用是一个决定 由内核开发人员基于每个内核制作。要正常工作, Magics 必须使用在底层中无效的语法元素 语言。例如,IPython 内核使用 % 语法元素 对于 Magics,因为 % 在 Python 中不是有效的一元运算符。然而, % 在其他语言中可能有含义。

R 不提供以这种方式实现魔法的良好条件,例如 %% 用作模运算符,! 用作逻辑非运算符。

这就是 IRkernel 的开发人员选择不支持 %%cell 魔术的原因 - 请参阅 this 或 this。

正如 cmets 中已经概述的那样,在使用 IRkernel 时,您需要在 R 语言本身中找到解决方案,例如使用内置函数访问 shell system2("ls", stdout = TRUE) 或搜索文件 list.files()(您可能还希望按照 @danlooo 的建议将它们包装在自定义函数中)。

如果您仍想使用魔法,另一种方法是使用 R 魔法(扩展 rmagic)和 IPython 内核,如 here 或 here 所示:

【讨论】:

以上是关于运行 R 内核时如何在 google Colab 中访问 shell的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Google colab 中更改 Keras/tensorflow 版本?

如何在 colab 中使用 R 运行时更改 tensorflow 版本?

如何在 Google Colab 笔记本的“.py”文件中运行 Python 脚本?

如何修复 google colab 上的 cuda 运行时错误?

如何防止从运行时断开连接(Google Colab)

如何在 Google Colab 上安装 PyTorch v1.0.0+?