sapply与自定义函数配合使用

来源:互联网 发布:js eval 替代方法 编辑:程序博客网 时间:2024/06/08 02:08


> a<-matrix(1:12,c(3,4))> a.df<-data.frame(a)

> a.df
  X1 X2 X3 X4
1  1  4  7 10
2  2  5  8 11
3  3  6  9 12

> sapply(a.df, function(x,y) x+y+3, y=10)    #按列对第一个参数进行function计算,第一个参数a.df是4列,所以结果是4个结果,而且计算结果的列名用原来的列名
     X1 X2 X3 X4
[1,] 14 17 20 23
[2,] 15 18 21 24
[3,] 16 19 22 25

> sapply(a.df[,1], function(x,y) x+y+3, y=10) # 第一个参数是一列
[1] 14 15 16
> sapply(a.df[,1:2], function(x,y) x+y+3, y=10)   # 第一个参数是2列
     X1 X2
[1,] 14 17

[2,] 15 18

[3,] 16 19

> sapply(a.df[,1:2], function(x,y) x+y+3, y=a.df[,4])   #多个参数的函数,都可以传列进去
     X1 X2
[1,] 14 17
[2,] 16 19
[3,] 18 21

> sapply(a.df[,1:2], function(x,y,z) x+y+z, y=a.df[,4],z=13) # 多个参数的函数,参数自由
     X1 X2
[1,] 24 27
[2,] 26 29
[3,] 28 31

> sapply(a.df[,1:2], function(x,y,z) x+y+z, y=a.df[,4],z=a.df[,3])  # 多个参数的函数,参数自由
     X1 X2
[1,] 18 21
[2,] 21 24
[3,] 24 27
> sapply(a.df[,1:2], function(x,y,z) {c(x+y+z, x+y+z+10)}, y=a.df[,4],z=13)  #函数输出为多个值时,注意变化!!! 第二个参数按行排列了
     X1 X2
[1,] 24 27
[2,] 26 29
[3,] 28 31
[4,] 34 37
[5,] 36 39
[6,] 38 41




0 0
原创粉丝点击