如何从另一个Jupyter笔记本文件中调用R代码?

3

我刚开始使用带有R内核的Jupyter笔记本。

我有两个文件中编写的R代码,分别为Settings.ipynbMain_data.ipynb

我的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')

但是现在在带有R内核的Main_data 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 代码并以正确方式将其保存(在使用 R 内核的 jupyter 笔记本中是 .ipynb 还是 .R 格式)?请问您能帮我吗?

更新的截图如下:

strong text


问题在于当我从Jupyter笔记本启动我的Settings.R文件时,我看到了{ "cells" : [...."。请查看带有截图的更新帖子。 - The Great
当我启动 Settings.ipynb 时,我可以看到原始代码,没有任何问题。请参考上面的代码。 - The Great
不,Settings.RSettings.ipynb文件都包含相同的R代码。之前我使用的是R Studio,我能够成功地运行source('Settings.R')。但是当我在Jupyter notebook中尝试相同的操作时,出现了错误。 - The Great
不,我将我的某些数据库设置和其他与程序相关的设置存储在 'settings.ipynb' 文件中。现在,我想从 'main_data.ipynb' 文件中调用/引用 'settings.ipynb' 文件。基本上,'settings.ipynb' 也被其他人用于他们的程序。因此,每当我们编写自定义代码时,我们都会从 'settings.ipynb' 文件中获取必要的设置。希望这有所帮助。 - The Great
好的,请。其他选项也可以,但是我理解得对,现在没有办法从另一个笔记本中获取在 Jupyter 笔记本中编写的 R 代码吗? - The Great
显示剩余8条评论
2个回答

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

Settings.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笔记本中

enter image description here

'Settings.INI'文件

enter image description here


@TheGreat 我只在开发阶段使用Jupyter(或者如果想要分享一些可重现的代码),因为它更容易测试,肯定会使得将代码转化为生产代码的过程更快。不清楚你为什么想要在Jupyter笔记本上完成所有工作。 - akrun
因为我并不是一名真正的软件开发人员。我只使用Python和R进行数据操作。因此,我认为Jupyter Notebook在这种情况下更容易使用。 - The Great
虽然我没有使用过这个解决方案,但我觉得这个解决方案很有用,并教会了我一种新的将内容导入到Jupyter笔记本文件中的方法。因此,我将其标记为答案。(已经点赞) - The Great
1
@TheGreat 另一个选项是将笔记本转换为 RMD 文件并获取单元格内容,或将其转换为 JSON 并获取值。 - akrun
嗨@akrun - 你能帮我看一下这篇文章吗?https://stackoverflow.com/questions/64311404/folder-in-github-is-missing-when-installed-as-r-package - The Great

1
尝试将Jupyter笔记本文件保存为.R格式是行不通的,因为该格式有些混乱(由于存在诸如{"cells": [...."之类的内容)。您可以通过在Jupyter Notebook中打开.R文件来验证这一点。
但是,您可以使用vim编辑器/R studio创建一个.R文件。这将允许您拥有内容而没有任何格式问题,例如{"cells": [...."
稍后从另一个jupyter笔记本中,您可以导入/源代码使用vim编辑器/R studio创建的.R文件。这为我解决了问题。
总之,不要使用jupyter笔记本创建.R文件,并使用另一个jupyter笔记本文件对它们进行源代码。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接