【问题标题】:R and Python in one Jupyter notebook一个 Jupyter 笔记本中的 R 和 Python
【发布时间】:2016-12-24 18:52:40
【问题描述】:

是否可以在同一个 Jupyter 笔记本中运行 R 和 Python 代码。有哪些可用的替代品?

  1. 在 Jupyter 中安装 r-essentials 并创建 R 笔记本。
  2. 安装 rpy2 并使用 rmagic 函数。
  3. 使用烧杯笔记本。

以上 3 个选项中哪一个可以可靠地运行 Python 和 R 代码 sn-ps(共享变量和可视化),还是已经有更好的选项?

【问题讨论】:

    标签: python r python-2.7 ipython jupyter-notebook


    【解决方案1】:

    是的,这是可能的!使用 rpy2。

    您可以使用以下方式安装 rpy2:pip install rpy2

    然后在您的一个单元格中运行%load_ext rpy2.ipython。 (您只需运行一次。)

    现在您可以执行以下操作:

    Python 单元格:

    # enables the %%R magic, not necessary if you've already done this
    %load_ext rpy2.ipython
    
    import pandas as pd
    df = pd.DataFrame({
        'cups_of_coffee': [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
        'productivity': [2, 5, 6, 8, 9, 8, 0, 1, 0, -1]
    })
    

    R 细胞:

    %%R -i df -w 5 -h 5 --units in -r 200
    # import df from global environment
    # make default figure size 5 by 5 inches with 200 dpi resolution
    
    install.packages("ggplot2", repos='http://cran.us.r-project.org', quiet=TRUE)
    library(ggplot2)
    ggplot(df, aes(x=cups_of_coffee, y=productivity)) + geom_line()
    

    您将从 python Pandas DataFrame 中获得漂亮的图形数据。

    【讨论】:

    • 当我尝试这个时,我收到一条错误消息:库中的错误(ggplot2):没有名为“ggplot2”的包
    • 这太棒了!请给自己买杯咖啡 - 给我。
    • 如何将 R 单元的任何输出返回给 python?
    【解决方案2】:

    使用@uut 的答案在 python 内核中的 jupyter notebook 中运行 R(在 MacOS 中),以下对我有用。

    %%R应该总是在单元格的开头,否则你会得到如下图所示的错误

    以下是正确的方式:

    另外,%load_ext rpy2.ipython 应该在 %%R 之前,因此如图所示将其放在其上方的不同单元格中。

    【讨论】:

      【解决方案3】:

      2018 年 4 月更新,

      RStudio 还推出了一个包: https://blog.rstudio.com/2018/03/26/reticulate-r-interface-to-python/

      可以使用 R markdown notebook 以不同的语言运行多个代码块,这类似于 jupyter notebook。

      在我之前的帖子中,我说过对象的底层表示是不同的。实际上,这里是对来自同一包的 R 和 python 的底层矩阵表示的更细致的讨论: https://rstudio.github.io/reticulate/articles/arrays.html

      旧帖:

      您很难在同一个笔记本中同时使用 R 和 Python 语法,主要是因为两种语言中对象的底层表示不同。也就是说,有一个项目确实尝试允许在同一个笔记本中转换对象和不同的语言: http://beakernotebook.com/features

      我自己没用过,但看起来很有希望

      【讨论】:

        【解决方案4】:

        SoS 内核是另一种选择。

        还不知道效果如何,刚开始用。

        SoS 内核允许您在同一笔记本中运行不同的语言,包括 Python 和 R。

        SoS Polyglot Notebook - Instructions for Installing Desired Languages

        这是一个带有Python and R cells 的笔记本示例。


        *更新:

        在共享变量方面,可以使用魔术%use 和%with。 "SoS 自动在所有子内核之间共享名称以 sos 开头的变量"1.

        例如。

        R 中的起始单元格:

        %use R
        sos_var=read.csv('G:\\Somefile.csv')
        dim(sos_var)
        

        输出:

        51  13
        

        切换到python:

        %with Python3
        sos_var.shape
        

        输出:

        (51, 13)
        

        【讨论】:

        • sos 看起来不错,但目前对开发人员的实际用途似乎有限。例如。如果你这样做 %get jl --from julia-1.0 print( jl ) -> 子内核 julia-1.0 不支持魔术 %put。如果您使用 conda,则必须将 Python 和 R 结合在一个环境中。
        猜你喜欢
        • 1970-01-01
        • 2018-04-13
        • 2018-09-23
        • 1970-01-01
        • 1970-01-01
        • 2020-05-17
        • 1970-01-01
        • 2022-01-04
        • 2021-04-28
        相关资源
        最近更新 更多