书接上回:
31. R studio/R 工具指南(十四:在Rstudio中使用python和conda)
虽然我们可以在R studio 中直接创建python 脚本,但这样毕竟比较麻烦,这里可以直接使用我的R 包函数make_py_template():
> make_py_template("sed")
You successfully create file: sed.py
和make_r_template 一样,其默认会在当前工作目录新建,并且会创建一个头文件。
安装方法如下:
# 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")
你可以指定下列参数:
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脚本与命令:
py_run_file("script.py")
> py_run_string("print('good')")
good
虽然R 和python 都是面向对象(新手)的编程语言,但是从数据类型上来看,二者还是存在很大区别的:
通常来说,我们在R 中使用python 函数,会默认的将py 类型数据转型为R 类型对象:
> tmp2 <- py$pandas$DataFrame(c(1:4))
> tmp2
0
1 1
2 2
3 3
4 4
我们也可以在载入py 模块时,显式的取消转型:
> 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:
> a
[1 2 3 4]
> class(a)
[1] "numpy.ndarray" "python.builtin.object"
> py_to_r(a)
[1] 1 2 3 4
R ->> py:
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(os$chdir)