首页>>互联网>>大数据->r软件用哪个函数处理大数据集(2023年最新分享)

r软件用哪个函数处理大数据集(2023年最新分享)

时间:2023-12-15 本站 点击:0

导读:今天首席CTO笔记来给各位分享关于r软件用哪个函数处理大数据集的相关内容,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

R语言可以处理大的数据吗

“参考网址1”中提到如果只是对整数运算(运算过程和结果都只使用整数),没有必要使用“double”(8 byte),而应该用更小的“integer”(4 byte)。使用storage.mode(x)查看对象存数的模式,storage.mode(x) - 进行赋值;使用format(object.size(a), units = 'auto')查看对象占用的内存空间(此处有疑问,即在R中每个integer到底占用了多大的空间?)。

需要解释gc()函数,可以查看内存使用情况。同样,在清除了大的对象之后,使用gc()以释放内存使用空间。

李航在”参考网址2“中提到,对于大矩阵的操作,尽量避免使用cbind和rbind之类,因为这会让内存不停地分配空间。“对于长度增加的矩阵,尽量先定义一个大矩阵,然后逐步增加”和“注意清除中间对象”。

使用bigmemory家族:bigmemory, biganalytics, synchronicity, bigtabulate and bigalgebra, 同时还有

biglm。

bigmemory package的使用:

1. 建立big.memory对象

bigmemory采用C++的数据格式来“模仿”R中的matrix。

编写大数据格式文件时候,可以先建立filebacked.big.matrix

big.matrix(nrow, ncol, type = options()$bigmemory.default.type, init = NULL, dimnames = NULL, separated = FALSE, backingfile = NULL, backingpath = NULL, descriptorfile = NULL, shared = TRUE)

filebacked.big.matrix(nrow, ncol, type = options()$bigmemory.default.type, init = NULL, dimnames = NULL, separated = FALSE, backingfile = NULL, backingpath = NULL, descriptorfile = NULL)

as.big.matrix(x, type = NULL, separated = FALSE, backingfile = NULL, backingpath = NULL, descriptorfile = NULL, shared=TRUE)

使用注意:

big.matrix采用两种方式储存数据:一种是big.matrix默认的方式,如果内存空间比较大,可以尝试使用;另外一种是filebacked.big.matrix,这种储存方法可能会备份文件(file-backings),而且需要descriptor file;

“init”指矩阵的初始化数值,如果设定,会事先将设定的数值填充到矩阵中;如果不设置,将处理为NA

"type"是指在big.matrix中atomic element的储存格式,默认是“double”(8 byte),可以改为“integer”(4 byte), "short"(2 byte) or "char"(1 byte)。注意:这个包不支持字符串的储存,type = "char"是指ASCII码字母。

在big.matrix非常大的时候,避免使用rownames和colnames(并且bigmemory禁止用名称访问元素),因为这种做法非常占用内存。如果一定要改变,使用options(bigmemory.allow.dimnames=TRUE),之后colnames, rownames设置。

直接在命令提示符后输入x(x是一个big matrix),将返回x的描述,不会出现所有x中所有内容。因此,注意x[ , ](打印出矩阵全部内容);

如果big.matrix有很多列,那么应该将其转置后储存;(不推荐)或者将参数“separated”设置为TRUE,这样就将每一列分开储存。否则,将用R的传统方式(column major的方式)储存数据。

如果建立一个filebacked.big.matrix,那么需要指定backingfile的名称和路径+descriptorfile。可能多个big.matrix对象对应唯一一个descriptorfile,即如果descriptorfile改变,所以对应的big.matrix随之改变;同样,decriptorfile随着big.matrix的改变而改变;如果想维持一种改变,需要重新建立一个filebacked.big.matrix。attach.big.matrix(descriptorfile or describe(big.matrix))函数用于将一个descriptorfile赋值给一个big.matrix。这个函数很好用,因为每次在创建一个filebacked.big.matrix后,保存R并退出后,先前创建的矩阵会消失,需要再attach.big.matrix以下

2. 对big.matrix的列的特定元素进行条件筛选

对内存没有限制;而且比传统的which更加灵活(赞!)

mwhich(x, cols, vals, comps, op = 'AND')

x既可以是big.matrix,也可以是传统的R对象;

cols:行数

vals:cutoff,可以设定两个比如c(1, 2)

comps:'eq'(==), 'neq'(!=), 'le'(), 'lt'(=), 'ge'() and 'gt'(=)

op:“AND”或者是“OR”

可以直接比较NA,Inf和-Inf

3.bigmemory中其他函数

nrow, ncol, dim, dimnames, tail, head, typeof继承base包

big.matrix, is.big.matrix, as.big.matrix, attach.big.matrix, describe, read.big.matrix, write.big.matrix, sub.big.matrix, is.sub.big.matrix为特有的big.matrix文件操作;filebacked.big.matrix, is.filebacked(判断big.matrix是否硬盘备份) , flush(将filebacked的文件刷新到硬盘备份上)是filebacked的big.matrix的操作。

mwhich增强base包中的which, morder增强order,mpermute(对matrix中的一列按照特定序列操作,但是会改变原来对象,这是为了避免内存溢出)

big.matrix对象的copy使用deepcopy(x, cols = NULL, rows = NULL, y = NULL, type = NULL, separated = NULL, backingfile = NULL, backingpath = NULL, descriptorfile = NULL, shared=TRUE)

biganalytics package的使用

biganalytics主要是一些base基本函数的扩展,主要有max, min, prod, sum, range, colmin, colmax, colsum, colprod, colmean, colsd, colvar, summary, apply(只能用于行或者列,不能用行列同时用)等

比较有特色的是bigkmeans的聚类

剩下的biglm.big.matrix和bigglm.big.matrix可以参考Lumley's biglm package。

bigtabulate package的使用

并行计算限制的突破:

使用doMC家族:doMC, doSNOW, doMPI, doRedis, doSMP和foreach packages.

foreach package的使用

foreach(..., .combine, .init, .final=NULL, .inorder=TRUE, .multicombine=FALSE, .maxcombine=if (.multicombine) 100 else 2, .errorhandling=c('stop', 'remove', 'pass'), .packages=NULL, .export=NULL, .noexport=NULL, .verbose=FALSE)

foreach的特点是可以进行并行运算,如在NetWorkSpace和snow?

%do%严格按照顺序执行任务(所以,也就非并行计算),%dopar%并行执行任务

...:指定循环的次数;

.combine:运算之后结果的显示方式,default是list,“c”返回vector, cbind和rbind返回矩阵,"+"和"*"可以返回rbind之后的“+”或者“*”

.init:.combine函数的第一个变量

.final:返回最后结果

.inorder:TRUE则返回和原始输入相同顺序的结果(对结果的顺序要求严格的时候),FALSE返回没有顺序的结果(可以提高运算效率)。这个参数适合于设定对结果顺序没有需求的情况。

.muticombine:设定.combine函数的传递参数,default是FALSE表示其参数是2,TRUE可以设定多个参数

.maxcombine:设定.combine的最大参数

.errorhandling:如果循环中出现错误,对错误的处理方法

.packages:指定在%dopar%运算过程中依赖的package(%do%会忽略这个选项)。

getDoParWorkers( ) :查看注册了多少个核,配合doMC package中的registerDoMC( )使用

getDoParRegistered( ) :查看doPar是否注册;如果没有注册返回FALSE

getDoParName( ) :查看已经注册的doPar的名字

getDoParVersion( ):查看已经注册的doPar的version

===================================================

# foreach的循环次数可以指定多个变量,但是只用其中最少?的

foreach(a = 1:10, b = rep(10, 3)) %do% (a*b)

[[1]]

[1] 10

[[2]]

[1] 20

[[3]]

[1] 30

# foreach中.combine的“+”或者“*”是cbind之后的操作;这也就是说"expression"返回一个向量,会对向量+或者*

foreach(i = 1:4, .combine = "+") %do% 2

[1] 8

foreach(i = 1:4, .combine = "rbind") %do% rep(2, 5)

[,1] [,2] [,3] [,4] [,5]

result.1 2 2 2 2 2

result.2 2 2 2 2 2

result.3 2 2 2 2 2

result.4 2 2 2 2 2

foreach(i = 1:4, .combine = "+") %do% rep(2, 5)

[1] 8 8 8 8 8

foreach(i = 1:4, .combine = "*") %do% rep(2, 5)

[1] 16 16 16 16 16

=============================================

iterators package的使用

iterators是为了给foreach提供循环变量,每次定义一个iterator,它都内定了“循环次数”和“每次循环返回的值”,因此非常适合结合foreach的使用。

iter(obj, ...):可以接受iter, vector, matrix, data.frame, function。

nextElem(obj, ...):接受iter对象,显示对象数值。

以matrix为例,

iter(obj, by=c('column', 'cell', 'row'), chunksize=1L, checkFunc=function(...) TRUE, recycle=FALSE, ...)

by:按照什么顺序循环;matrix和data.frame都默认是“row”,“cell”是按列依次输出(所以对于“cell”,chunksize只能指定为默认值,即1)

chunksize:每次执行函数nextElem后,按照by的设定返回结果的长度。如果返回结构不够,将取剩余的全部。

checkFunc=function(...) TRUE:执行函数checkFun,如果返回TRUE,则返回;否则,跳过。

recycle:设定在nextElem循环到底(“错误: StopIteration”)是否要循环处理,即从头再来一遍。

以function为例

iter(function()rnorm(1)),使用nextElem可以无限重复;但是iter(rnorm(1)),只能来一下。

更有意思的是对象如果是iter,即test1 - iter(obj); test2 - iter(test1),那么这两个对象是连在一起的,同时变化。

==============================================

a

[,1] [,2] [,3] [,4] [,5]

[1,] 1 5 9 13 17

[2,] 2 6 10 14 18

[3,] 3 7 11 15 19

[4,] 4 8 12 16 20

i2 - iter(a, by = "row", chunksize=3)

nextElem(i2)

[,1] [,2] [,3] [,4] [,5]

[1,] 1 5 9 13 17

[2,] 2 6 10 14 18

[3,] 3 7 11 15 19

nextElem(i2) #第二次iterate之后,只剩下1行,全部返回

[,1] [,2] [,3] [,4] [,5]

[1,] 4 8 12 16 20

i2 - iter(a, by = "column", checkFunc=function(x) sum(x) 50)

nextElem(i2)

[,1]

[1,] 13

[2,] 14

[3,] 15

[4,] 16

nextElem(i2)

[,1]

[1,] 17

[2,] 18

[3,] 19

[4,] 20

nextElem(i2)

错误: StopIteration

colSums(a)

[1] 10 26 42 58 74

testFun - function(x){return(x+2)}

i2 - iter(function()testFun(1))

nextElem(i2)

[1] 3

nextElem(i2)

[1] 3

nextElem(i2)

[1] 3

i2 - iter(testFun(1))

nextElem(i2)

[1] 3

nextElem(i2)

错误: StopIteration

i2 - iter(testFun(1))

i3 - iter(i2)

nextElem(i3)

[1] 3

nextElem(i2)

错误: StopIteration

============================================

iterators package中包括

irnorm(..., count);irunif(..., count);irbinom(..., count);irnbinom(..., count);irpois(..., count)中内部生成iterator的工具,分别表示从normal,uniform,binomial,negativity binomial和Poisson分布中随机选取N个元素,进行count次。其中,negative binomial分布:其概率积累函数(probability mass function)为掷骰子,每次骰子为3点的概率为p,在第r+k次恰好出现r次的概率。

icount(count)可以生成1:conunt的iterator;如果count不指定,将从无休止生成1:Inf

icountn(vn)比较好玩,vn是指一个数值向量(如果是小数,则向后一个数取整,比如2.3 -- 3)。循环次数为prod(vn),每次返回的向量中每个元素都从1开始,不超过设定 vn,变化速率从左向右依次递增。

idiv(n, ..., chunks, chunkSize)返回截取从1:n的片段长度,“chunks”和“chunkSize”不能同时指定,“chunks”为分多少片段(长度从大到小),“chunkSize”为分段的最大长度(长度由大到小)

iapply(X, MARGIN):与apply很像,MARGIN中1是row,2是column

isplit(x, f, drop=FALSE, ...):按照指定的f划分矩阵

=============================================

i2 - icountn(c(3.4, 1.2))

nextElem(i2)

[1] 1 1

nextElem(i2)

[1] 2 1

nextElem(i2)

[1] 3 1

nextElem(i2)

[1] 4 1

nextElem(i2)

[1] 1 2

nextElem(i2)

[1] 2 2

nextElem(i2)

[1] 3 2

nextElem(i2)

[1] 4 2

nextElem(i2)

错误: StopIteration

R语言读取大数据表格中有条件的子集

不知道你说的大表格有多大,但只要能加载到R语言的内存中运算就可以计算。使用subset函数

假设数据集为x

a - subset(x,A30)

a - subset(a,D50)

subset第一个参数是要筛选的数据集,第二个就是条件,像你说的问题,在第一步过滤的基础上再过滤一次就行,也可以合并到一起。

如何让Hadoop结合R语言做统计和大数据分析

R是GNU的一个开源工具,具有S语言血统,擅长统计计算和统计制图。广大R语言爱好者借助强大工具RHadoop,可以在大数据领域大展拳脚,这对R语言程序员来说无疑是个喜讯。

RHadoop是一款Hadoop和R语言的结合的产品,由RevolutionAnalytics公司开发,并将代码开源到github社区上

面。RHadoop包含三个R包 (rmr,rhdfs,rhbase),分别是对应Hadoop系统架构中的,MapReduce, HDFS,

HBase 三个部分。

2). RHiveRHive是一款通过R语言直接访问Hive的工具包,是由NexR一个韩国公司研发的。

3). 重写Mahout用R语言重写Mahout的实现也是一种结合的思路,我也做过相关的尝试。

4).Hadoop调用R

上面说的都是R如何调用Hadoop,当然我们也可以反相操作,打通JAVA和R的连接通道,让Hadoop调用R的函数。但是,这部分还没有商家做出成形的产品。

5. R和Hadoop在实际中的案例

1.R和Hadoop的结合,技术门槛还是有点高的。对于一个人来说,不仅要掌握Linux, Java, Hadoop, R的技术,还要具备 软件开发,算法,概率统计,线性代数,数据可视化,行业背景 的一些基本素质。在公司部署这套环境,同样需要多个部门,多种人才的的配合。Hadoop运维,Hadoop算法研发,R语言建模,R语言

MapReduce化,软件开发,测试等等。所以,这样的案例并不太多。

RHadoop是一款Hadoop和R语言的结合的产品,由RevolutionAnalytics公司开发,并将代码开源到github社区上面。RHadoop包含三个R包 (rmr,rhdfs,rhbase),分别是对应Hadoop系统架构中的,MapReduce, HDFS, HBase 三个部分。

2). RHiveRHive是一款通过R语言直接访问Hive的工具包,是由NexR一个韩国公司研发的。

3). 重写Mahout用R语言重写Mahout的实现也是一种结合的思路,我也做过相关的尝试。

4).Hadoop调用R

上面说的都是R如何调用Hadoop,当然我们也可以反相操作,打通JAVA和R的连接通道,让Hadoop调用R的函数。但是,这部分还没有商家做出成形的产品。

5. R和Hadoop在实际中的案例

R和Hadoop的结合,技术门槛还是有点高的。对于一个人来说,不仅要掌握Linux, Java, Hadoop, R的技术,还要具备

软件开发,算法,概率统计,线性代数,数据可视化,行业背景

的一些基本素质。在公司部署这套环境,同样需要多个部门,多种人才的的配合。Hadoop运维,Hadoop算法研发,R语言建模,R语言

MapReduce化,软件开发,测试等等。

在r语言中用什么命令读取全部数据

使用R语言的时候,如果是少量数据,不妨使用c()或其他函数进行创建;但是对于大量数据,最好还是先通过其他更方便的软件创建数据文件,然后使用R读入这个文件。

.csv是非常好的数据文件格式,跨平台支持非常好。我在Excel或者SPSS中创建的数据,只要存为csv格式,就可以使用几乎任何数据处理软件对这些数据进行处理了。使用通用格式在多人合作、不同版本兼容等常见行为中,优势十分明显。另外,之所以使用不同的数据处理软件,第一,可以取长补短。比如有些工作SPSS很复杂的,可以用R语言几行命令搞定。第二,可以进行软件间处理结果对照,发现问题。

R语言中读取外部文件的最基本函数是read.table(),还有用来读csv的read.csv(), .csv是非常好的数据文件格式,跨平台支持非常好。。

输入help(read.table)命令,就看到了关于数据输入函数的说明。

R数据科学(五)探索性数据分析

明确概念:探索性数据分析(exploratory data analysis, EDA),一般过程为:

(1) 对数据提出问题。

(2) 对数据进行可视化、转换和建模,进而找出问题的答案。

(3) 使用上一个步骤的结果来精炼问题,并提出新问题。

确定变量是分类变量还是连续变量,要想检查分类变量的分布,可以使用条形图:

条形的高度表示每个 x 值中观测的数量,可以使用 dplyr::count() 手动计算出这些值:

要想检查连续变量的分布,可以使用直方图:

可以通过 dplyr::count() 和 ggplot2::cut_width() 函数的组合来手动计算结果. binwidth 参数来设定直方图中的间隔的宽度,该参数是用 x 轴变量的单位来度量的。

在同一张图上叠加多个直方图, 用geom_freqploy()代替geom_histogram(),用折线表示。

相似值聚集形成的簇表示数据中存在子组。

coord_cartesian() 函数中有一个用于放大 x 轴的 xlim() 参数。 ggplot2 中也有功能稍有区

别的 xlim() 和 ylim() 函数:它们会忽略溢出坐标轴范围的那些数据。

如果带有异常值和不带异常值的数据分别进行分析,结果差别较大的话要找出异常值的原因,如果差别不大,可以用NA代替。

5.3.4 练习

(1)研究 x、 y 和 z 变量在 diamonds 数据集中的分布。你能发现什么?思考一下,对于一条

钻石数据,如何确定表示长、宽和高的变量?

(2)研究 price 的分布,你能发现不寻常或令人惊奇的事情吗?(提示:仔细考虑一下

binwidth 参数,并确定试验了足够多的取值。)

(3) 0.99 克拉的钻石有多少? 1 克拉的钻石有多少?造成这种区别的原因是什么?

(4)比较并对比 coord_cartesina() 和 xlim()/ylim() 在放大直方图时的功能。如果不设置

binwidth 参数,会发生什么情况?如果将直方图放大到只显示一半的条形,那么又会发

生什么情况?

数据中有异常值,可以将异常值去掉:

一般不建议去掉,建议使用缺失值来代替异常值。

ifelse函数参数1放入逻辑判断,如果为T,结果就是第二个参数的值,如果为F,就是第三个参数的值。

ggplot2会忽略缺失值:

练习

(1) 直方图如何处理缺失值?条形图如何处理缺失值?为什么会有这种区别?

(2) na.rm = TRUE 在 mean() 和 sum() 函数中的作用是什么?

移除缺失值再进行统计

按分类变量的分组显示连续变量分布的另一种方式是使用箱线图

练习

(1) 前面对比了已取消航班和未取消航班的出发时间,使用学习到的知识对这个对比的可视

化结果进行改善。

(2) 在钻石数据集中,哪个变量对于预测钻石的价格最重要?这个变量与切割质量的关系是

怎样的?为什么这两个变量的关系组合会导致质量更差的钻石价格更高呢?

(3) 安装 ggstance 包,并创建一个横向箱线图。这种方法与使用 coord_flip() 函数有何区别?

(4) 箱线图存在的问题是,在小数据集时代开发而成,对于现在的大数据集会显示出数量极

其庞大的异常值。解决这个问题的一种方法是使用字母价值图。安装 lvplot 包,并尝试

使用 geom_lv() 函数来显示价格基于切割质量的分布。你能发现什么问题?如何解释这

种图形?

(5) 比较并对比 geom_violin()、分面的 geom_histogram() 和着色的 geom_freqploy()。每种方法的优缺点是什么?

(6) 对于小数据集,如果要观察连续变量和分类变量间的关系,有时使用 geom_jitter() 函数是特别有用的。 ggbeeswarm 包提供了和 geom_jitter()相似的一些方法。列出这些方法

并简单描述每种方法的作用。

两个分类变量的关系肯定要先计数,可以用geom_count()函数

d3heatmap 或 heatmaply 包可以生成交互式图

练习

(1) 如何调整 count 数据,使其能更清楚地表示出切割质量在颜色间的分布,或者颜色在切

割质量间的分布?

(2) 使用 geom_tile() 函数结合 dplyr来探索平均航班延误数量是如何随着目的地和月份的

变化而变化的。为什么这张图难以阅读?如何改进?

(3) 为什么在以上示例中使用 aes(x = color, y = cut) 要比 aes(x = cut, y = color) 更好?

连续变量之间的关系一般用散点图来表示。geom_point()

对于大数据集,为了避免重合,可以用geom_bin2d() 和 geom_hex()函数将坐标平面分为二维分箱,并使用一种填充颜色表示落入

每个分箱的数据点。

另一种方式是对一个连续变量进行分箱,因此这个连续变量的作用就相当于分类变量。

cut_width(x, width) 函数将 x 变量分成宽度为 width 的分箱。参数 varwidth = TRUE 让箱线图的宽度与观测数量成正比。

cut_number() 函数近似地显示每个分箱中的数据点的数量

练习

(1) 除了使用箱线图对条件分布进行摘要统计,你还可以使用频率多边形图。使用 cut_

width() 函数或 cut_number() 函数时需要考虑什么问题?这对 carat 和 price 的二维分

布的可视化表示有什么影响?

(2) 按照 price 分类对 carat 的分布进行可视化表示。

(3) 比较特别大的钻石和比较小的钻石的价格分布。结果符合预期吗?还是出乎意料?

(4) 组合使用你学习到的两种技术,对 cut、 carat 和 price 的组合分布进行可视化表示。

(5) 二维图形可以显示一维图形中看不到的离群点。例如,以下图形中的有些点具有异常的

x 值和 y 值组合,这使得这些点成为了离群点,即使这些点的 x 值和 y 值在单独检验时

似乎是正常的。

ggplot(data = diamonds) +

geom_point(mapping = aes(x = x, y = y)) +

coord_cartesian(xlim = c(4, 11), ylim = c(4, 11))

数据中的模式提供了关系线索,用于探索两个变量的相关性。

模型是用于从数据中抽取模式的一种工具。

残差(预测值和实际值之间的差别)

阅读推荐:

生信技能树公益视频合辑:学习顺序是linux,r,软件安装,geo,小技巧,ngs组学!

B站链接:

YouTube链接:

生信工程师入门最佳指南:

结语:以上就是首席CTO笔记为大家整理的关于r软件用哪个函数处理大数据集的全部内容了,感谢您花时间阅读本站内容,希望对您有所帮助,更多关于r软件用哪个函数处理大数据集的相关内容别忘了在本站进行查找喔。


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