【问题标题】:How to source R code from another Jupyter notebook file?如何从另一个 Jupyter 笔记本文件中获取 R 代码?
【发布时间】:2020-09-29 15:13:20
【问题描述】:

我不熟悉使用带有 R 内核的 Jupyter notebook。

我在Settings.ipynbMain_data.ipynb 两个文件中编写了R 代码。

我的Settings.ipynb 文件有很多细节。我在下面显示示例详细信息

Schema = "dist"
resultsSchema = "results"
sourceName = "hos"
dbms = "postgresql" #Should be "sql server", "oracle", "postgresql" or "redshift"

user <- "hos"
pw <- "hos"
server <- "localhost/hos"
port <- "9763"

我想在Main_data 代码文件中获取Settings 文件。

当我使用R studio时,很容易,因为我只是使用下面的

 source('Settings.R')

但是现在在Main_data带有R内核的Jupyter Notebook中,当我编写下面的代码时

 source('Settings.R')  # settings file is in same directory as main_data file

我收到以下错误

Error in source("Settings.R"): Settings.R:2:11: unexpected '['
1: {
2:  "cells": [
             ^
Traceback:

1. source("Settings.R")

当我尝试以下操作时,我收到另一个错误,如下所示

source('Settings.ipynb')

Error in source("Settings.ipynb"): Settings.ipynb:2:11: unexpected '['
1: {
2:  "cells": [
             ^
Traceback:

1. source("Settings.ipynb")

我如何获取R code 以及保存它的正确方法是什么(.ipynb.R 在 jupyter 笔记本(使用 R 内核)中的格式)。你能帮我解决这个问题吗?

更新截图

【问题讨论】:

  • 我也试过这个f &lt;- 'Settings.ipynb' eval(parse(text = system2('jupyter', c('nbconvert', f, '--to=script', '--stdout', stdout = TRUE)))),但没有用
  • (1) source(Settings.R) 仅在您有一个实际指向真实文件的 named Settings.R 变量时才有效。如果这不是你的真实代码,那么请不要给我们“特殊的重新输入的代码”,因为它会让你对代码进行故障排除变得更加令人沮丧和困难。 (2) { "cells": [ ... 看起来像 json,而不是 R,不知道那里发生了什么。也许您的.R 文件的那部分应该用引号引起来? (3) 不包括任何一个文件,您将限制我们可以提供的帮助。
  • 问题是当我从 Jupyter 笔记本启动我的Settings.R 文件时,我看到了{ "cells" : [...."。请找到带有屏幕截图的更新帖子。
  • 当我启动Settings.ipynb 时,我看到原始代码没有任何问题。请参考上面的代码
  • 好的,但是 (1) 那不是 R 代码; (2) source 仅适用于 R 代码,因此 source("Settings.ipynb")source("Settings.R")(文件中包含非 R 代码)都不能工作。我不知道你是如何创建 Settings.R 文件的,但是……不管你怎么想,它不是 R 代码。

标签: r jupyter-notebook jupyter jupyter-lab jupyter-irkernel


【解决方案1】:

我们可以在同一个(或不同的)工作目录中创建一个.INI 文件,并使用ConfigParser 来解析所有元素。 .INI 文件将是

设置.INI

[settings-info]
schema = dist
resultsSchema = results
sourceName = hos
dbms = postgresql

user = hos
pw = hos
server = localhost/hos

然后,我们初始化一个解析器对象,从文件中读取内容。我们可以有多个子标题(这里只有“settings-info”)并使用[[$ 提取组件

library(ConfigParser)
props <- ConfigParser$new()
props <- props$read("Settings.INI")$data
props[["settings-info"]]$schema

来自 Jupyter 笔记本

“Settings.INI”文件

【讨论】:

  • @TheGreat 我只在开发阶段使用 jupyter(或者如果它想共享一些可重现的代码),因为它更容易测试并且肯定会使生产代码的过程更快。不清楚为什么要在 Jupyter notebook 上做所有事情
  • 因为我不是真正的软件开发人员。我仅将 python 和 R 用于数据操作。因此,我觉得 jupyter notebook 更容易处理这种情况。
  • 虽然我没有使用这个解决方案,但我觉得这个解决方案很有用,并且教会了我一种将内容导入到 jupyter notebook 文件的新方法。所以,我将此标记为答案。 (已投票)
  • @TheGreat 另一种选择是将笔记本转换为RMD 文件并获取单元格内容或转换为 JSON 并获取值。
  • 嗨@akrun - 可以帮我写这篇文章吗? stackoverflow.com/questions/64311404/…
【解决方案2】:

尝试以 .R 格式保存 Jupyter 笔记本文件将无法正常工作,因为格式有点混乱(由于存在 { "cells" : [...." 之类的内容。您可以通过打开 .R 文件来验证这一点Jupyter 笔记本。

但是,您可以使用 vim 编辑器/R 工作室来创建 .R 文件。这将允许您保持原样的内容,而不会出现任何格式问题,例如{ "cells" : [...."

稍后,您可以从另一个 jupyter notebook 导入/获取使用 vim 编辑器/R studio 创建的 .R 文件。这为我解决了这个问题。

总之,不要使用 jupyter notebook 创建 .R 文件并使用另一个 jupyter notebook 文件获取它们。

【讨论】:

    猜你喜欢
    • 2018-09-02
    • 2018-09-23
    • 2020-05-17
    • 2020-08-26
    • 1970-01-01
    • 2016-07-24
    • 2020-03-11
    • 2016-12-24
    • 1970-01-01
    相关资源
    最近更新 更多