将 Python 与 RStudio IDE 配合使用(R与Python系列第一篇)

目录

前言:

1-安装reticulate包

2-安装Python

3-选择Python的默认版本(配置Python环境)

4-使用Python

4.1 运行一个简单的Python脚本

4.2 在RStudio上安装Python模块

4.3 在 R 中调用 Python 模块

4.4 在RStudio上调用Python脚本写的函数

4.5 Python 与 R 对象相互转换的方式

R → Python

Python → R

5-在 R Console 中交互式运行 R

6-在RStudio中安装Python包遇到问题时解决方案

参考:

前言:

RStudio 1.4为RStudio IDE带来了对Python编程语言的改进支持。本文将探讨如何将Python与R和RStudio一起使用。

RStudio使用 R包reticulate 与Python交互,因此RStudio的Python集成需要:

  1. 安装 Python (2.7 or newer; 3.5 or newer preferred), and
  2. 安装R包reticulate (1.20 or newer, as available from CRAN)

1-安装reticulate包

install.packages("reticulate")

2-安装Python

首先,需要在您的机器上安装Python。如果您还没有安装Python,可以通过几种方式安装它:

  1. (推荐)使用reticulate::install_miniconda(),使用reticulate包安装Python的Miniconda发行版;
  2. (Windows)通过https://www.python.org/downloads/windows/提供的官方Python二进制文件安装Python;
  3. (macOS)通过https://www.python.org/downloads/mac-osx/提供的官方Python二进制文件安装Python;
  4. (Linux)从源代码安装Python,或者通过操作系统的包管理器提供的Python版本安装Python。有关详细信息,请参阅https://docs.python.org/3/using/unix.html。如果您自己从源代码安装Python,最好将其安装到 /opt/python/<version>之类的位置,这样RStudio和reticullate可以更容易地发现它。

3-选择Python的默认版本(配置Python环境)

一定要配置Python环境,不然在RStudio不能成功Python包。

可以通过Tools->Global Options…->Python配置默认版本的Python以与RStudio一起使用:

Python解释器也就是Python,这一步是选择Python的默认版本。

“Python解释器(Python interpreters):”输入框显示要使用的默认Python解释器(如果有)。如果您已经知道要使用的Python解释器的位置,您可以在该输入框中键入解释器的位置。

否则,如果输入框中没有显示默认Python解释器,可以通过单击“选择…”按钮在系统上发现Python解释器:

RStudio将通过几种不同的方法搜索Python解释器:

  • On the PATH;
  • For virtual environments, located within the ~/.virtualenvs folder;
  • For Conda environments, as reported by conda --list,
  • For pyenv Python installations located in ~/.pyenv,
  • For Python installations located in /opt/python.

测试环境:

py_available() #检测Python是否安装成功,返回TRUE即表示安装成功

4-使用Python

4.1 运行一个简单的Python脚本

reticulate包可以在当前运行的R会话中加载和使用Python。安装reticulate包后,可以打开Python脚本(扩展名为. py),并执行其中的代码,类似于R。

注意到:在控制台(console)中,>表示运行R代码,>>>表示运行的Python代码。

请注意,RStudio使用reticulate Python REPL来执行代码,并根据正在执行的脚本在R和Python之间自动切换。

当reticulate REPL处于活动状态时,可以通过r辅助对象访问R会话中的对象。例如,r["mtcar"]可用于从R访问mtcar数据集,并将其转换为pandas DataFrame(如果可用),如果没有,则转换为Python dictionary。

4.2 在RStudio上安装Python模块

以pandas模块为例:

reticulate::py_install("pandas")

# 安装seaborn绘图库
# pip = T指定从pip安装,默认从conda安装
py_install("seaborn", pip = T)# 查看seaborn模块是否已安装
py_module_available("seaborn")
> [1] TRUE

4.3 在 R 中调用 Python 模块

 例子1:

# 调用os模块的listdir()函数
os <- import("os")
os$listdir("./")
>  [1] ".Rproj.user"      "convert.R"        "reticulate.Rmd"   "Reticulate.Rproj"
>  [5] "Rscript.R"        "summary.html"     "summary.md"       "summary.nb.html" 
>  [9] "summary.Rmd"      "test_pyscript.py"

 例子2:

# 调用seaborn模块的load_dataset()函数
# 需要seaborn模块已安装
sns <- import("seaborn")
tips <- sns$load_dataset("tips")
print(head(tips))
>   total_bill  tip    sex smoker day   time size
> 1      16.99 1.01 Female     No Sun Dinner    2
> 2      10.34 1.66   Male     No Sun Dinner    3
> 3      21.01 3.50   Male     No Sun Dinner    3
> 4      23.68 3.31   Male     No Sun Dinner    2
> 5      24.59 3.61 Female     No Sun Dinner    4
> 6      25.29 4.71   Male     No Sun Dinner    4

4.4 在RStudio上调用Python脚本写的函数

想法与在RStudio中调用C++自定义函数一样。建议编写的Python自定义函数名与Python脚本名称一样,这样通过source_python()函数调用这个Python自定义函数,这意味着Python自定义函数可以在RStudio中不变函数名使用,使用的其实时同名的R函数。

例子1:

(1)在Python环境下,编写一个Python脚本,保存为flights.py。可以看到这个python函数名为read_flights().

import pandas
def read_flights(file):flights = pandas.read_csv(file)flights = flights[flights['dest'] == "ORD"]flights = flights[['carrier', 'dep_delay', 'arr_delay']]flights = flights.dropna()return flights

(2)在RStudio中使用source_python调用实现写好的flight.py文件。

source_python("flights.py")
flights <- read_flights("flights.csv") #使用flights.py脚本中的Python自定义函数library(ggplot2)
ggplot(flights, aes(carrier, arr_delay)) + geom_point() + geom_jitter()

 例子2:

假设 Python 脚本为test_pyscript.py,内容如下:

# 打印一些数据
for i in range(10):print("hello world)# 定义1个函数
def sum_two_value(a, b):return a + b

在 R 中执行 test_pyscript.py 

source_python("./test_pyscript.py")> hello world
> hello world
> hello world
> hello world
> hello world
> hello world
> hello world
> hello world
> hello world
> hello worldsum_two_value(1, 2)
> [1] 3

4.5 Python 与 R 对象相互转换的方式

R → Python

设置一些R对象:

A <- 1B <- c(1, 2, 3)C <- c(a = 1, b = 2, c = 3)D <- matrix(1:4, nrow = 2)E <- data.frame(a = c(1, 2), b = c(3, 4))G <- list(1, 2, 3)H <- list(c(1, 2), c(3, 4))I <- list(a = c(1, 2), b = c(3, 4))J <- function(a, b) {return(a + b)
}K1 <- NULL
K2 <- T
K3 <- F

上述 R 对象转为 Python 对象(Python Cell)

r.A
> 1.0
type(r.A)
> <class 'float'>
r.B
> [1.0, 2.0, 3.0]
type(r.B)
> <class 'list'>
r.C
> [1.0, 2.0, 3.0]
type(r.C)
> <class 'list'>
r.D
> array([[1, 3],
>        [2, 4]])
type(r.D)
> <class 'numpy.ndarray'>
r.E
>      a    b
> 0  1.0  3.0
> 1  2.0  4.0
type(r.E)
> <class 'pandas.core.frame.DataFrame'>
r.G
> [1.0, 2.0, 3.0]
type(r.G)
> <class 'list'>
r.H
> [[1.0, 2.0], [3.0, 4.0]]
type(r.H)
> <class 'list'>
r.I
> {'a': [1.0, 2.0], 'b': [3.0, 4.0]}
type(r.I)
> <class 'dict'>
r.J
> <function make_python_function.<locals>.python_function at 0x000001AE204ECE18>
type(r.J)
> <class 'function'>
r.J(2, 3)
> 5
r.K1
type(r.K1)
> <class 'NoneType'>
r.K2
> True
type(r.K2)
> <class 'bool'>
r.K3
> False
type(r.K3)
> <class 'bool'>

Python → R

设置一些 Python 对象(Python Cell)

A = 1B = [1, 2, 3]C = [[1, 2], [3, 4]]D1 = [[1], 2, 3]
D2 = [[1, 2], 2, 3]E = (1, 2, 3)FF = ((1, 2), (3, 4))G = ((1, 2), 3, 4)H = {"a": [1, 2, 3], "b": [2, 3, 4]}I = {"a": 1, "b": [2, 3, 4]}def J(a, b):return a + b

 上述 Python 对象转为 R 对象(R Cell)

py$A
> [1] 1
class(py$A)
> [1] "integer"py$B
> [1] 1 2 3
class(py$B)
> [1] "integer"py$C
> [[1]]
> [1] 1 2
> 
> [[2]]
> [1] 3 4
class(py$C)
> [1] "list"py$D1
> [[1]]
> [1] 1
> 
> [[2]]
> [1] 2
> 
> [[3]]
> [1] 3
class(py$D1)
> [1] "list"
py$D2
> [[1]]
> [1] 1 2
> 
> [[2]]
> [1] 2
> 
> [[3]]
> [1] 3
class(py$D2)
> [1] "list"py$E
> [[1]]
> [1] 1
> 
> [[2]]
> [1] 2
> 
> [[3]]
> [1] 3
class(py$E)
> [1] "list"py$FF
> [[1]]
> [[1]][[1]]
> [1] 1
> 
> [[1]][[2]]
> [1] 2
> 
> 
> [[2]]
> [[2]][[1]]
> [1] 3
> 
> [[2]][[2]]
> [1] 4
class(py$FF)
> [1] "list"py$G
> [[1]]
> [[1]][[1]]
> [1] 1
> 
> [[1]][[2]]
> [1] 2
> 
> 
> [[2]]
> [1] 3
> 
> [[3]]
> [1] 4
class(py$G)
> [1] "list"py$H
> $a
> [1] 1 2 3
> 
> $b
> [1] 2 3 4
class(py$H)
> [1] "list"py$I
> $a
> [1] 1
> 
> $b
> [1] 2 3 4
class(py$I)
> [1] "list"py$J
> <function J at 0x000001AE204ECE18>
class(py$J)
> [1] "python.builtin.function" "python.builtin.object"
py$J(2, 3)
> [1] 5

5-在 R Console 中交互式运行 R

  • repl_python () 进入 Python 环境
  • exit 退出 Python 环境

6-在RStudio中安装Python包遇到问题时解决方案

问题:No module named 'tensorflow_probability' 

通过在新的R会话中运行以下操作可以解决许多安装问题(您可以使用Ctrl+Shift+F10在Rdios中重新启动R):

# install the development version of packages, in case the
# issue is already fixed but not on CRAN yet.
install.packages("remotes")
remotes::install_github(sprintf("rstudio/%s", c("reticulate", "tensorflow", "keras")))
reticulate::miniconda_uninstall() # start with a blank slate
reticulate::install_miniconda()
tfprobability::install_tfprobability()

 注意:其中在miniconda_uninstall() 卸载之前安装的miniconda时,要将RStudio中Tools-->Global Options--->Python-->将Python interpreter(Python解释器)清除掉。(注:下图是已经清除掉的界面,如果没有执行清楚操作,Python interpreter输入框中是有内容的)。

参考:

https://support.posit.co/hc/en-us/articles/1500007929061 (给出了在RStudio中配置Python环境的最简单方法)

🤔 Reticulate | 如何在Rstudio中优雅地调用Python!? - 知乎 (zhihu.com) (给出了安装Python包的命令)

No module named 'tensorflow_probability' · Issue #155 · rstudio/tfprobability · GitHub (安装包遇到问题时的解决办法)

reticulate:在R中使用Python - 知乎 (zhihu.com)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/68861.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ssh无法启动 报错:sshd:Missing privilege separation directory:/var/empty/sshd

ssh无法启动 报错&#xff1a;sshd:Missing privilege separation directory:/var/empty/sshd 根据提示检查/var/empty/sshd /var/empty&#xff1a;默认是sshd程序用到的这个目录&#xff0c;当建立ssh连接&#xff0c;ssh服务器必须使用该目录下的sshd子目录&#xff1b; …

Linux使用bonding实现双网冗余

1、简介 linux bonding 是一种将多个物理网卡绑定为一个逻辑网卡的技术&#xff0c;它可以实现网络的冗余、负载均衡和带宽扩展等功能。linux bonding 是 linux 内核中提供的一个模块&#xff0c;它支持七种工作模式&#xff0c;不同的模式有不同的特点和适用场景。linux bond…

vue前端解决跨域

1,首先 axios请求&#xff0c;看后端接口路径&#xff0c;http://122.226.146.110:25002/api/xx/ResxxList&#xff0c;所以baseURL地址改成 ‘/api’ let setAxios originAxios.create({baseURL: /api, //这里要改掉timeout: 20000 // request timeout}); export default s…

【C++ 二叉搜索树】

目录 1.什么是二叉搜索树2.构建二叉搜索树2.1首先搭建树的框架2.2搭建搜索树的框架 3.二叉搜索树的插入3.1非递归式插入3.2递归式插入 4.二叉搜索树的查找4.1非递归查找4.2递归查找 5.二叉搜索树的删除5.1非递归删除5.2递归删除 6.整个代码实现 1.什么是二叉搜索树 简单来讲就…

NSSCTF web 刷题记录1

文章目录 前言题目[GXYCTF 2019]禁止套娃方法一方法二 [NCTF 2019]Fake XML cookbook[NSSRound#7 Team]ec_RCE[NCTF 2018]Flask PLUS 前言 今天是2023.9.3&#xff0c;大二开学前的最后一天。老实说ctf的功力还是不太够做的题目太少&#xff0c;新学期新气象。不可急于求成&am…

java中ThreadPoolExecutor线程池如何设置核心线程数和最大线程数,跟cpu核数有关系吗?

在 ThreadPoolExecutor 中&#xff0c;可以通过设置核心线程数和最大线程数来控制线程池的行为。这两个参数可以根据实际需求进行调整&#xff0c;并且它们与 CPU 核数之间存在一定的关系。 通常情况下&#xff0c;可以根据 CPU 核数来设置线程池的核心线程数和最大线程数。以…

设置 Hue Server 与 Hue Web 界面之间的会话超时时间

设置 Hue Server 与 Hue Web 界面之间的会话超时时间 在 CDH 的 Hue 中&#xff0c;Auto Logout Timeout 参数表示用户在不活动一段时间后将自动注销&#xff08;登出&#xff09;的超时时间。当用户在 Hue 中处于不活动状态超过该设定时间时&#xff0c;系统将自动注销用户&am…

redis问题:三种集群——主从、哨兵、cluster集群;16384槽等

目录 redis三种集群模式 1、主从 2、哨兵&#xff08;Sentinel&#xff09; 3、集群&#xff08;Cluster&#xff09; Redis Cluster为什么有16384个槽&#xff1f; 1、8KB的心跳包太大 2、集群的数量不会超过1000。 主从配置和集群配置区别 1、主从 2、集群 redis三种…

如何处理ChatGPT与用户之间的互动和反馈?

处理ChatGPT与用户之间的互动和反馈是关于改进和优化用户体验的关键方面。这涉及到在聊天、对话和交互中建立积极的用户关系&#xff0c;同时利用用户的反馈来不断改进ChatGPT的性能和功能。本文将探讨如何有效地处理ChatGPT与用户之间的互动和反馈&#xff0c;以提供更好的用户…

FreeRTOS中断与任务之间同步(Error:..\..\FreeRTOS\portable\RVDS\ARM_CM4F\port.c,422 )

前言&#xff1a; FreeRTOS中&#xff0c;中断需要注意几点&#xff1a; 何时使用中断&#xff1b;中断服务函数&#xff08;ISR&#xff09;要处理的数据量有多大&#xff0c;通常我们希望中断的切换越快越好&#xff0c;也就是说&#xff0c;ISR尽量采用耗时较少的处理方式…

撮合前端平台在低代码平台的落地实践 | 京东云技术团队

在京东技术的发展当下&#xff0c;不同的业务线&#xff0c;不同的区域&#xff0c;甚至于很多触达消费者的端&#xff0c;正在被中台架构能力所支撑。大家都很清楚&#xff0c;中台建设能够带来技术的规模化效应&#xff0c;具有提高业务协同、加速创新和交付速度、提高系统稳…

Java问题诊断和排查工具

文章目录 一、前言二、Java问题诊断和排查工具1、JDK自带工具2、常用命令3、JAVA Dump&#xff1a;3.1、jps3.2、jstack3.3、jmap3.3.1、jmap -heap pid:查看堆使用情况3.3.2、jmap -histo pid&#xff1a;查看堆中对象数量和大小3.3.3、jmap -dump:formatb,fileheapdump pid&a…

FFmpeg rtp rtp_mpegts的区别

rtp 在FFmpeg中&#xff0c;rtpenc是一个用于将音视频数据封装成RTP&#xff08;Real-time Transport Protocol&#xff09;数据包并发送到网络上的编码器。RTP是一种用于实时传输音视频数据的协议&#xff0c;常用于视频会议、流媒体等场景。 rtpenc可以将音视频数据封装成R…

【数据库】如何利用Python中的petl将PostgreSQL中所有表的外键删除,迁移数据,再重建外键

一、简介 在数据库管理中&#xff0c;外键是一种重要的约束&#xff0c;用于确保数据的一致性和完整性。然而&#xff0c;在某些情况下&#xff0c;我们可能需要删除或修改外键。本文将介绍如何使用Python中的petl库将PostgreSQL中所有表的外键删除&#xff0c;迁移数据&#…

K8S的介绍和架构

仅供入门 K8S的介绍和架构 一. 什么是kubernetes二、Kubernetes架构和组件 2.1 核心组件 2.1.1 Kubernetes Master控制组件&#xff0c;调度管理整个系统&#xff08;集群&#xff09;&#xff0c;包含如下组件: a、Kubernetes API Serverb、Kubernetes Schedulerc、Kubernet…

Linux 禁止用户或 IP通过 SSH 登录

Linux 禁止用户或 IP通过 SSH 登录 限制用户 SSH 登录 1.只允许指定用户进行登录(白名单): 在 /etc/ssh/sshd_config 配置文件中设置 AllowUsers 选项,(配置完成需要重启 SSHD 服务)格式如下: AllowUsers aliyun test@192.168.1.1 # 允许 aliyun 和从 19…

Apply AirPlay+HomeKit专栏目录

从2022年起&#xff0c;我陆续写了一些关于Airplay和HomeKit的相关文章&#xff0c;主要介绍了关于苹果认证的一些技术和如何使用&#xff0c;因为这是一个相对来说小众冷门的领域&#xff0c;网络上很多资料都找不到&#xff0c;最开始刚接触苹果物联网IOT和智能家居时&#x…

springboot自动装配原理,手写一个starter。

文章目录 springboot自动装配原理手写starter手写starter总结&#xff1a; springboot自动装配原理 口述&#xff1a; springboot自动装配的话它其实就是只需要我们添加一个starter起步依赖&#xff0c;它就能完成这个依赖组件相关Bean的自动注入&#xff0c;其实就是自动的将…

Android通过setaffinity实现绑核

有时候为了降低App算力占用&#xff0c;会把关键的线程绑定到大核中&#xff0c;下面介绍一种绑核的方式 查看绑核 查看pid :/ # ps -A | grep test u0_a15 25178 405 15950272 176544 do_epoll_wait 0 S com.test.jnites查看线程号 top -H -p 25178 25224 u0_…

SpringMVC的工作流程及入门

目录 一、概述 ( 1 ) 是什么 ( 2 ) 作用 二、工作流程 ( 1 ) 流程 ( 2 ) 步骤 三、入门实例 ( 1 ) 入门实例 ( 2 ) 静态资源处理 给我们带来的收获 一、概述 ( 1 ) 是什么 SpringMVC是一个基于Java的Web应用开发框架&#xff0c;它是Spring Framework的一部…