尽管我很喜欢R,但很明显,Python也是一种伟大的语言--无论是对于数据科学还是通用计算。而且R用户可能有很好的理由想用Python做一些事情。也许它是一个伟大的库,但没有R语言的对应物(还没有)。
由于R的reticulate包,你可以在R脚本中直接运行Python代码,并在Python和R之间来回传递数据。
[ 在InfoWorld的 "Do More with R "视频系列中获取Sharon Machlis的R技巧。
如果你想继续学习,用install.packages("reticulate")和library(reticulate)安装并加载reticulate。
为了保持简单,让我们从两行Python代码开始,导入用于基本科学计算的NumPy包并创建一个四个数字的阵列。Python 代码看起来像这样:
import numpy as npmy_python_array = np.array([2,4,6,8])
而这里有一种方法可以在 R 脚本中正确完成:
py_run_string("import numpy as np")py_run_string("my_python_array = np. array([2,4,6,8])")
py_run_string() 函数执行括号和引号内的任何 Python 代码。
如果你在 R 中运行这段代码,它可能看起来像什么都没有发生。在你的 RStudio 环境窗格中没有显示任何东西,也没有返回任何值。如果你在 R 中运行 print(my_python_array) ,你会得到一个错误,即 my_python_array 不存在。
但是如果你在 py_run_string() 函数中运行一个 Python 打印命令,例如
py_run_string("for item in my_python_array: print(item)")
你应该看到一个结果。
不过,如果你有超过几行的代码,像这样一行一行地运行 Python 代码会很烦人。所以有一些其他的方法可以在 R 和 reticulate 中运行 Python。
一种是把所有的 Python 代码放在一个普通的 .py 文件中,然后使用 py_run_file() 函数。我喜欢的另一种方式是使用 R Markdown 文档。
R Markdown 让你在一个文档中结合文本、代码、代码结果和可视化。你可以在RStudio中选择File > New File > R Markdown来创建一个新的R Markdown文档。
代码块以三个背号(```)开始,以三个背号结束,在RStudio中默认有一个灰色背景。它加载了 reticulate 包,然后你指定了你要使用的 Python 版本。(
``{r setup, include=FALSE, echo=TRUE}library(reticulate)use_python("/usr/bin/python")``
下面这第二块是Python代码。你可以像在Python文件中那样输入Python。下面的代码导入NumPy,创建一个数组,并打印该数组。
``{python}import numpy as npmy_python_array = np.array([2,4,6,8])for item in my_python_array: print(item)``
这里是最酷的部分。你可以在 R 中使用这个数组,把它称为 py$my_python_array (一般来说,py$objectname)。
在接下来的这段代码中,我把 Python 数组存储在一个叫做 my_r_array 的 R 变量中。然后我检查这个数组的类。
``{r}my_r_array <- py$my_python_arrayclass(my_r_array)``
这是一个类 "数组",这并不是你对这样一个 R 对象的期望。
``{r}my_r_vector <- as.vector(py$my_python_array)class(my_r_vector)my_r_vector <- my_r_vector * 2```
接下来是很酷的部分。我可以在Python中使用那个R变量,作为r.my_r_array(更普遍的是r.variablename),例如
``{python}my_python_array2 = r.my_r_vectorprint(my_python_array2)``
如果你想看看这看起来像什么,而不用在你的系统上设置Python,请查看本故事顶部的视频。