命令行脚本

通过Windows 或Linux终端环境命令行运行R和Python脚本类似。要运行的命令被分解成以下部分:

参数说明

▲ 是可执行的命令 (R代码中是 Rscript, Python代码中是Python)

▲是执行脚本所在的完整或相对文件路径。需要注意的是,如果在路径名中有空格,整个文件路径必须用双引号括起来。

▲这是空格分隔的参数列表用来解析脚本本身。请注意,这些不能作为字符串传递。

例如,打开一个终端环境并运行R脚本,命令如下:Rscript path/to/myscript.R arg1 arg2 arg3

请注意以下问题:

对于Rscript 和Python 命令必须在你所在的路径中执行,否则你需要提供文件的完整路径。含有空格符的路径名会产生问题,尤其是在Window系统中,因此必须用双引号括起来,这样才被认为是一个单独的文件路径。

R语言中访问命令行参数

上面的例子中,arg1,arg2 和 arg3是用来解析可执行R脚本的参数,可以使用commandArgs函数访问

##myscript.py

#获取命令行参数

myArgs

#myArgs是所有参数的特征向量

print(myArgs) print(class(myArgs))

通过设置trailingOnly 为TRUE,myArgs向量中只包含添加到命令行的参数。如果默认设置为FALSE ,myArgs向量中还包含其它参数,比如刚被执行的脚本路径。

Python语言中访问命令行参数

通过下面的命令行执行Python脚本:

python path/to/myscript.py arg1 arg2 arg3

通过在Python脚本中导入sys模块访问arg1, arg2 和arg3参数。 sys模块包含了系统具体的参数和函数,在这里,我们只对 argv的属性感兴趣。这个argv属性是所有被传递到当前正在执行脚本的参数列表。表中的第 一个元素是正在被执行的脚本的完整路径。

# myscript.py

import sys

# 获取命令行参数

my_args = sys.argv

# my_args 是一个列表,其中的第一个元素是执行的脚本

print(type(my_args))

print(my_args)

如果你只希望保留传递到脚本的参数,你可以使用列表切片来选择除了第一个元素以外的所有参数。

# 使用切片,选择除第一个以外的所有元素

my_args = sys.argv[1:]

回顾一下上面的R语言例子,所有的参数需要以字符串的形式传递,因此有必要转换为所期望的数据类型。

将输出结果写入文件。

通过中间文件共享R和Python之间的数据有几种选择。通常,对于普通文本文件,CSVs是很好的表格数据格式,而处理可变长字段或许多嵌套数据结构的非结构化数据(或元数据)形式时,JSON 或YAML是最好的数据格式。

这些都是很常见的数据序列化格式,在R和Python中已存在相应的语法解析器。

在R语言中推荐下面的程序包:

● 对于CSV文件,使用readr

● 对于JSON文件,使用jsonlite

● 对于YAML文件,使用yaml

Python中推荐:

○ 对于CSV文件,使用csv

○ 对于JSON文件,使用json

○ 对于YAML文件,使用PyYAML

csv 和json模块是Python标准的库文件,是Python内置模块,而PyYAML需要额外安装程序包。所有的R程序包均需要安装。

总结

R和Python之间的数据传递可以通过单一传递途径进行:

△使用命令行传递参数

△使用常见的结构化文本文件传递数据

然而,在某些实例中,需要将文本文件作为中间文件存储在本地,这不仅很麻烦而且还影响性能。接下来,我们将讨论如何在R和Python中直接调用并在内存中输出。

命令行执行和执行子进程

为了更好地理解在执行子进程的时候发生了什么,值得重新考虑当命令行运行一个Python 或 R进程中更多的细节。在运行下面的命令时,启动了一个新的 Python 进程执行该脚本。

在执行过程中,任何被输出到标准输出和标准错误流的数据会返回到控制台显示。最常见的实现方式是通过Python中的一个内置函数print()或 是 R中的函数 cat()和 print(),它们将给定字符串的写入标准输出流。一旦脚本执行完毕,Python进程随即关闭。

在这种方式下运行命令行脚本是有用的,但如果希望用这个方法执行多个连续却相互独立脚本时,就变得繁琐,并且容易出错。然而,这可能让一个 Python或R进程直接去执行另一个类似的命令。这样有好处,即从一个Python父进程启动一个R中的子进程去运行特定的脚本,进而完成分析。一旦R 脚本运行完毕,R中子进程的输出不是被传到控制台,而是返回到父进程中。使用这种方法除去了手动单独执行命令行的步骤。

为了说明一个进程的执行是由另一个进程引起的,我们将会用两个简单的例子:一个是Python调用R,另一个是R调用Python。我们人为降低了每个案例中分析结果的重要性,以便把重点放在机器是如何的实现的过程上。

R脚本范例

我们简单的R脚本例子要从命令行获取一系列数字并返回最大值。

# max.R

# 获取命令行参数

myArgs

# 转换成数字类型

nums = as.numeric(myArgs)

# cat将把结果写入标准输出流

cat(max(nums))

在Python中执行R脚本

我们需要利用子进程的模块,也就是标准库的一部分,来实现从Python中进行调用。我们将使用函数check_output 来调用 R 脚本,执行命令并存储标准输出的结果。

想要在Python中调用R来执行 max.R脚本,首先要建立要运行的命令。在Python中的形式以一个字符串列表表示,其相应的元素如下所示:[‘’, ‘’, ‘arg1’ , ‘arg2’, ‘arg3’, ‘arg4’]

下面代码是运行在Python中调用R的一个例子:

# run_max.py

import subprocess

# 定义命令和参数

command = ‘Rscript’

path2script = ‘path/to your script/max.R’

# args变量的值是一个列表

args = [’11’, ‘3’, ‘9’, ’42’]

#建立子进程命令

cmd = [command, path2script] + args

# check_output会执行命令并存储结果

x = subprocess.check_output(cmd, universal_newlines=True)

print(‘The maximum of the numbers is:’, x)

参数 universal_newlines=True 告诉 Python 把返回的输出结果解释为文本字符串,并处理 Windows 和 Linux 的换行字符。如果省略了这个,则输出结果会被作为一个字节的字符串返回,同时在进行任何字符串进一步操作之前必须调用x.decode()来解码成文本。

Python脚本范例

在我们简单的 Python 脚本中,我们将给定的字符串(第一个参数)拆分为基于所提供的字符串模式的多个子字符串 (第二个参数)。然后,结果以每行一个子字符串的形式输出到控制台。

# splitstr.py

import sys

# 获取传入的参数

string = sys.argv[1]

pattern = sys.argv[2]

#执行分割

ans = string.split(pattern)

#把所产生的元素列表合成一个新命令行

# 分割字符串并打印

print(‘\n’.join(ans))

在R中调用Python

当用R执行子进程时,建议使用 R 的system2函数来执行并获取输出。这是因为内置的系统函数跨平台不兼容,非常难使用。

建立要执行的命令是类似于上面的 Python 例子,然而system2 期望命令根据它的参数被分解开来。此外,这些参数首先必须总是正在执行的脚本的路径。

最后一个困难可能是R脚本路径名称中的空格处理引起的。解决这一问题最简单的方法是为全路径名称加上双引号,然后用单引号封装此字符串,这样,R保留参数本身的双引号。

下面的代码中,给出在R 中执行 Python 脚本的实例。

# run_splitstr.R

command = “python”

#注意在字符串中的单引号和双引号(如果路径名中有空格,这是必须的)

path2script='”path/to your script/splitstr.py”‘

# 设置args成向量

string = “3523462—12413415—4577678—7967956—5456439”

pattern = “—”

args = c(string, pattern)

# 把脚本路径加入,成为第一个arg参数

allArgs = c(path2script, args)

output = system2(command, args=allArgs, stdout=TRUE)

print(paste(“The Substrings are:\n”, output))

为了获取标准输出中的特征向量(每个元素一行),stdout=TRUE 必须在system2中具体说明,不然返回的只是退出状态。当stdout=TRUE时,退出状态存储在一个名为“状态”的属性中。

通过子进程调用,可以将Python和R整合到一个应用程序中。这允许一个父进程调用另一个进程作为子进程,并获取任何输出到标准输出的结果。

python r语言 数据分析_PythonR语言-将Python和R整合进一个数据分析流程相关推荐

  1. python与数据分析结合_将Python和R整合进一个数据分析流程

    原标题:将Python和R整合进一个数据分析流程 在Python中调用R或在R中调用Python,为什么是"和"而不是"或"? 在互联网中,关于"R ...

  2. python数据分析的主要流程-将Python和R整合进一个数据分析流程

    编译:丁一 黄念 丁雪 校对:席雄芬 姚佳灵 程序验证:郭姝妤 序言 在Python中调用R或在R中调用Python,为什么是"和"而不是"或"? 在互联网中, ...

  3. 将Python和R整合进一个数据分析流程

             人工智能大数据与深度学习  公众号: weic2c 在Python中调用R或在R中调用Python,为什么是"和"而不是"或"? 在互联网中, ...

  4. r语言和python-R语言 vs Python对比:数据分析哪家强?

    什么是R语言? R语言,一种自由软件编程语言与操作环境,主要用于统计分析.绘图.数据挖掘.R本来是由来自新西兰奥克兰大学的罗斯・伊哈卡和罗伯特・杰特曼开发(也因此称为R),现在由"R开发核心 ...

  5. python医学应用_数据分析工具鄙视链:Python、R语言是老大,Excel只能称小弟?

    最新行业报告 2020数据分析.商业分析行业报告工作岗位与职能.薪资对比.热招公司等多方面详细解读帮助你一网打尽,斩获心仪Offer! 扫码回复[数据分析 0]立即领取 History语言发展史ABC ...

  6. Python 在数据分析工作中的地位与 R 语言比较如何?

    随着数据分析在各个行业的广泛应用,数据分析工具的选择变得越来越重要.那么Python 在数据分析工作中的地位与 R 语言.SAS.SPSS 比较如何呢? Python和R语言成为了两个最受欢迎的工具. ...

  7. sas python jump r在临床试验中的应用_Python 在数据分析工作中的地位与 R 语言、SAS、SPSS 比较如何?...

    全部用过的人来回答一下: spss对用户的要求是只要会点击菜单就可以了,有编程窗口但是一般没人用,用户多是收到过一些统计训练的,但不需要高深的分析能力,市场调研用的比较多,统计专业大二一般要求掌握 s ...

  8. r语言和python-PythonR语言-python和r相遇

    前言 如果你是数据分析领域的新兵,那么你一定很难抉择--在进行数据分析时,到底应该使用哪个语言,R还是Python?在网络上,也经常出现诸如"我想学习机器语言,我应该用哪个编程语言" ...

  9. Python:Python语言的简介(语言特点/pyc介绍/Python版本语言兼容问题(python2 VS Python3))、安装、学习路线(数据分析/机器学习/网页爬等编程案例分析)之详细攻略

    Python:Python语言的简介(语言特点/pyc介绍/Python版本语言兼容问题(python2 VS Python3)).安装.学习路线(数据分析/机器学习/网页爬等编程案例分析)之详细攻略 ...

最新文章

  1. 机器学习 决策树 ID3
  2. 6.3 Spring Boot集成mongodb开发
  3. 超强、超详细Redis数据库入门教程
  4. 看到了商机,为什么赚不到钱?
  5. 第三次作业-结对编程
  6. 分子计算机已经问世,纳米计算机指日可待?
  7. biu~ 你的智能语音客服已免费一键生成!
  8. android颜色值的表示方法android:background=#FFFFFFFF的意思
  9. 公众号开发 单独 给某个用户 推送消息_韩国5G用户6月底已达134万 较5月底增加近70%...
  10. 新的Java缓存标准(javax.cache)
  11. (并查集)How Many Tables -- HDU --1213
  12. AIO 开始不定时的抛异常: java.io.IOException: 指定的网络名不再可用
  13. bfs (宽度搜素)
  14. mac安装仿宋GB2312字体
  15. 约翰·库缇斯(没有双腿的激励大师,年轻人必看)转载
  16. oracle18c静默安装教程,centos7安装Oracle18c
  17. cvte在线笔试 android,CVTE在线笔试
  18. 级联rc滤波_六阶级联式开关电容低通滤波器设计与仿真分析
  19. 低代码助力生产管理:离散型制造业MES系统
  20. 谈谈如何通过需求文档产生工作排期

热门文章

  1. Python生成大量随机人员信息
  2. Linux系统升级维护费,Antergos Linux 宣布停止维护
  3. php获取时间格式的年份,PHP获取当前时间、时间戳的各种格式写法汇总
  4. java报错信息怎么看_AE-E3D插件无效或提示OPENGL E3D Debug等错误报错信息怎么办?...
  5. 为什么python除法结果会有小数点0_为什么Python返回0进行简单的除法计算?
  6. 通过CDN引入jQuery的几种方式
  7. 如何将cad格式转化为qt可以识别的图像_看BIM技术如何计算土方工程量
  8. java document to xml_Java Document.asXML方法代碼示例
  9. java future用法_你必须掌握的 21 个 Java 核心技术
  10. visual studio编译linux,在 Visual Studio 中配置 Linux MSBuild C++ 项目