R语言 plyr包 m_ply mdply

R语言 m_ply的使用

plyr包也算得上是R语言的神器,可以并行,可以显示进程,尤其是可以自定义返回值。其中最长使用的是ldply, llply等单参数函数,今天想介绍多参数传递的函数m_ply、 mdply、maply、mlply。
m_ply 系列函数来源于基础包的 mapply 函数。

mapply

# 双参数
 f = function(a, b){
      return(c(2*a, 3*b))
   }
  mapply(f, 1:4, 2:5)
  #每一列为一组结果
# [,1] [,2] [,3] [,4]
#[1,] 2 4 6 8
#[2,] 6 9 12 15

mapply(f, 1:4, 2)
# [,1] [,2] [,3] [,4]
#[1,] 2 4 6 8 
#[2,] 6 6 6 6

可见mapply的使用,多个参数,要么长度相同, 要么其中的参数固定不变。

m_ply

m_ply函数我们以mdply为例


mdply(.data, #实参在data.frame中传递
 .fun = NULL,# 使用的函数
  ..., .expand = TRUE,
   .progress = "none",# 是否显示进度条,可以设置为 text
  .inform = FALSE, 
  .parallel = FALSE,# 是否使用并行
   .paropts = NULL)
#例子
 f = function(a, b){
      return(c(2*a, 3*b))
   }
mdply(data.frame(a=1:4, b=2:5),f)
 # a,b 两列,每一行为一组数据

# 每一行为一组结果, V1, V2为返回值
#a b V1 V2
#1 1 2 2 6
#2 2 3 4 9
#3 3 4 6 12
#4 4 5 8 15

# 2列可变参数,一个固定参数的情况
mdply(data.frame(mean = 1:5, sd = 1:5), rnorm, n = 2)

#n为固定参数,分别以1,2,3,4,5为均值和标准差生成2个随机数。
# mean sd V1 V2
#1 1 1 2.467133 0.3460016
#2 2 2 5.298599 4.3033986
#3 3 3 2.431185 6.6862659
#4 4 4 -2.372333 11.8205677
#5 5 5 2.396693 1.8423787

你可能感兴趣的:(函数,R语言,plyr,mdply)