Usingle apply, sapply, lapply in R

举例子说明R中apply sapply lapply 的用法

1、数据准备

m <- matrix(data=cbind(rnorm(30, 0), rnorm(30, 2), rnorm(30, 5)), nrow=30, ncol=3)//通过rnorm(n,m)生成行数为n,平均为m的数据列。
    method1  method2    method3 

[1,] 0.05517714 0.014054038 0.017260447
[2,] 0.08367678 0.003570883 0.004289079
[3,] 0.05274706 0.028629661 0.071323030
[4,] 0.06769936 0.048446559 0.057432519
[5,] 0.06875188 0.019782518 0.080564474
[6,] 0.04913779 0.100062929 0.102208706

2、apply
平均

apply(m,1,mean)//行平均
apply(m,2,mean)//列平均

公式:function代替mean,求每一列中x<0 的个数

apply(m, 2, function(x) length(x[x<0]))
#[1] 14  1  0

function代替mean,求每一列中x<0 的个数
必须给length加个名字function(x),这样是不允许的,必须在function内包装好代码

apply(m, 2, length(x[x<0]))
#Error in match.fun(FUN) : object 'x' not found
apply(m, 2, function(x) mean(x[x>0]))
#[1] 0.4466368 2.0415736 4.8685779

function 目的是想求出matrix中的每一列是matrix还是Vector,答案是Vector

apply(m, 2, function(x) is.matrix(x))
#[1] FALSE FALSE FALSE
apply(m, 2, is.vector)
#[1] TRUE TRUE TRUE

3、sapply & lapply
通过一系列的list或者向量改造,对其中的每一项做一定的变化

sapply(1:3, function(x) x^2)
#[1] 1 4 9
//返回一个vector
lapply(1:3, function(x) x^2)
#[[1]]
#[1] 1
#
#[[2]]
#[1] 4
#
#[[3]]
#[1] 9
//返回一个list

//sapply加上一个simplify=F,sapply也能够返回list
sapply(1:3, function(x) x^2, simplify=F)
#[[1]]
#[1] 1
#
#[[2]]
#[1] 4
#
#[[3]]
#[1] 9
//lapply前加上unlist也能得到Vector
unlist(lapply(1:3, function(x) x^2))
#[1] 1 4 9

实际上,sapply是将1:3一个个的带入functionz中求值,然后返回,下面的例子同样实现的是每列求平均,但是在这个例子里就可以任意定义需要求平均的列了

sapply(1:3, function(x) mean(m[,x]))
[1] -0.02664418  1.95812458  4.86857792

或者

sapply(1:3, function(x, y) mean(y[,x]), y=m)
#[1] -0.02664418  1.95812458  4.86857792

这里的y值从sapply的可选参数中传入。

以上所有内容翻译自http://www.r-bloggers.com/using-apply-sapply-lapply-in-r/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值