R语言

入R随俗-apply和for

2019-05-10  本文已影响68人  Juan_NF
  • 知道各行各业都有鄙视链,没想到函数之间都有,真是相煎何太急。。。
  • 我都要渴死了,你跟我讲农夫山泉和依云的区别,等我先活过去再说吧。。。
  • 这两天我活过来了,静下心来了解下apply;
  • 其实归根结底还是function用得好,才能得到想要的结果,否则,我们也就只能用R里已有的函数进行行列循环而已;
下面,我们用apply和for同时实现相同的需求:
test数据框:
apply(X, MARGIN, FUN, ...)
> rm(list=ls())
> test<-data.frame(a=seq(1,10,2),b=seq(2,11,2),c=seq(11,20,2),d=c('mon','tue','wed','thu','fri'))
> test
  a  b  c   d
1 1  2 11 mon
2 3  4 13 tue
3 5  6 15 wed
4 7  8 17 thu
5 9 10 19 fri
用function和apply实现:

之前有讲过function的结构和简单使用:https://www.jianshu.com/p/ea29d93836df
之前有讲过paste0:https://www.jianshu.com/p/2ee3a2625be3

> y<-function(x){
+   mean_row<-mean(as.numeric(c(x[1],x[3])))
+   str_paste<-paste0(x[2],x[4])
+   result<-c(mean=mean_row,str=str_paste)
+   return(result)
+   }
> tmp<-apply(test,1,y)
> tmp
     [,1]    [,2]    [,3]    [,4]    [,5]   
mean "6"     "8"     "10"    "12"    "14"   
str  " 2mon" " 4tue" " 6wed" " 8thu" "10fri"
> class(test)
[1] "data.frame"
> class(tmp)
[1] "matrix"
用for循环实现:
> test_r<-c(rep(1,10))
> dim(test_r)<-c(5,2)
> for(i in 1:nrow(test)){
+   test_r[i,1]<-mean(c(test[i,1],test[i,3]))
+   test_r[i,2]<-paste0(test[i,2],test[i,4])
+ }
> test_r
     [,1] [,2]   
[1,] "6"  "2mon" 
[2,] "8"  "4tue" 
[3,] "10" "6wed" 
[4,] "12" "8thu" 
[5,] "14" "10fri"

课程分享
生信技能树全球公益巡讲
https://mp.weixin.qq.com/s/E9ykuIbc-2Ja9HOY0bn_6g
B站公益74小时生信工程师教学视频合辑
https://mp.weixin.qq.com/s/IyFK7l_WBAiUgqQi8O7Hxw
招学徒:
https://mp.weixin.qq.com/s/KgbilzXnFjbKKunuw7NVfw

上一篇 下一篇

猜你喜欢

热点阅读