前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >​33. R studio/R 工具指南(十六:详说R 中运行python)

​33. R studio/R 工具指南(十六:详说R 中运行python)

作者头像
北野茶缸子
发布2021-12-17 09:05:12
8980
发布2021-12-17 09:05:12
举报
文章被收录于专栏:北野茶缸子的专栏

书接上回:

31. R studio/R 工具指南(十四:在Rstudio中使用python和conda)

0. 创建py 脚本

虽然我们可以在R studio 中直接创建python 脚本,但这样毕竟比较麻烦,这里可以直接使用我的R 包函数make_py_template():

代码语言:javascript
复制
> make_py_template("sed")
You successfully create file: sed.py

和make_r_template 一样,其默认会在当前工作目录新建,并且会创建一个头文件。

安装方法如下:

代码语言:javascript
复制
# install devtools
install.packages("devtools")

devtools::install_github("mugpeng/pengToolkit")

# 如果是境内用户

#安装官方包‘remotes’
install.packages("remotes")
#安装官方包‘git2r’
install.packages("git2r")

remotes::install_git("https://gitee.com/mugpeng/pengToolkit.git")

你可以指定下列参数:

1. 在R 中运行python

导入模块执行

代码语言:javascript
复制
np <- import("numpy", convert = FALSE)

# do some array manipulations with NumPy
a <- np$array(c(1:4))
sum <- a$cumsum()

运行命令

之前我们提到过source_python() 命令可以source py脚本。

source 的作用是获取脚本中的所有对象。

这里我们还可以在R 中直接执行py脚本与命令:

代码语言:javascript
复制
py_run_file("script.py")

> py_run_string("print('good')")
good

2. R 与py 的转型

虽然R 和python 都是面向对象(新手)的编程语言,但是从数据类型上来看,二者还是存在很大区别的:

通常来说,我们在R 中使用python 函数,会默认的将py 类型数据转型为R 类型对象:

代码语言:javascript
复制
> tmp2 <- py$pandas$DataFrame(c(1:4))
> tmp2
  0
1 1
2 2
3 3
4 4

我们也可以在载入py 模块时,显式的取消转型:

代码语言:javascript
复制
> np <- import("numpy", convert = FALSE)
> # do some array manipulations with NumPy
> a <- np$array(c(1:4))
> a
[1 2 3 4]
> class(a)
[1] "numpy.ndarray"         "python.builtin.object"

py ->> R:

代码语言:javascript
复制
> a
[1 2 3 4]
> class(a)
[1] "numpy.ndarray"         "python.builtin.object"
> py_to_r(a)
[1] 1 2 3 4

R ->> py:

代码语言:javascript
复制
a1 <- data.frame(1:4,4:7)
> r_to_py(a1)
   X1.4  X4.7
0     1     4
1     2     5
2     3     6
3     4     7
> class(r_to_py(a1))
[1] "pandas.core.frame.DataFrame"       
[2] "pandas.core.generic.NDFrame"       
[3] "pandas.core.base.PandasObject"     
[4] "pandas.core.accessor.DirNamesMixin"
[5] "pandas.core.base.SelectionMixin"   
[6] "pandas.core.indexing.IndexingMixin"
[7] "python.builtin.object" 

一些小建议

个人还是觉得,虽然一些代码方便了我们在R 中使用py,比如np_array 等方便我们在R 中直接获得py 中的类型对象;但是,相比起熟练的掌握R 中的python 语法,倒不如直接去学习python 语法。

我们可以直接将命令打包成python 脚本,直接在R 中通过py_run_file 运行其即可;再或者,我们也可以使用source_python,从而直接使用封装在py 脚本中的函数或对象,再对它们进行转型。

当然,从我个人来说,我还是更偏向直接运行py 脚本的;毕竟这样你也基本不用去管py 与R 的对象转型,又可以偷懒一点~

因此,教程里有很多R 中的python 指令我自己也都没有看了,如果你想学习,可以参见:https://rstudio.github.io/reticulate/articles/calling_python.html

其他命令

  • py_help 虽然R studio 提供了一定程度上的代码补全,但我们并不能直接通过R 的方法获得它们的帮助信息,这时候可以通过py_help 进行查询:
代码语言:javascript
复制
py_help(os$chdir)
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-09-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 北野茶缸子 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0. 创建py 脚本
  • 1. 在R 中运行python
    • 导入模块执行
      • 运行命令
      • 2. R 与py 的转型
      • 一些小建议
      • 其他命令
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档