R apply()函數


創建一個列表變量,它的第一個元素包含所有從0到9的平方數,第二個元素為10到19之內的所有平方數,依此類推,最后一個元素為90到99之內的平方數。沒有平方數的元素也應該被包含在內!

學習網友的解題思路,用的是apply()函數。

學習 apply() 函數:

1.apply函數的使用方法:

apply(X, MARGIN, FUN)
Here:
-x: 一個數組或者矩陣
-MARGIN: 兩種數值1或者2決定對哪一個維度進行函數計算
-MARGIN=1`: 操作基於行
-MARGIN=2`: 操作基於列
-MARGIN=c(1,2)`: 對行和列都進行操作
-FUN: 使用哪種操作,內置的函數有mean(平均值)、medium(中位數)、sum(求和)、min(最小值)、max(最大值),當然還包括廣大的用戶自定義函數

2.解題

> m1 = matrix(0:99,nrow = 10,ncol = 10,byrow = T)
> m1
      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
 [1,]    0    1    2    3    4    5    6    7    8     9
 [2,]   10   11   12   13   14   15   16   17   18    19
 [3,]   20   21   22   23   24   25   26   27   28    29
 [4,]   30   31   32   33   34   35   36   37   38    39
 [5,]   40   41   42   43   44   45   46   47   48    49
 [6,]   50   51   52   53   54   55   56   57   58    59
 [7,]   60   61   62   63   64   65   66   67   68    69
 [8,]   70   71   72   73   74   75   76   77   78    79
 [9,]   80   81   82   83   84   85   86   87   88    89
[10,]   90   91   92   93   94   95   96   97   98    99
> list =  apply(
+   m1,MARGIN = 1,
+   function(m1)
+   {
+     m1[round(sqrt(m1))^2==m1]
+   })
> list
[[1]]
[1] 0 1 4 9

[[2]]
[1] 16

[[3]]
[1] 25

[[4]]
[1] 36

[[5]]
[1] 49

[[6]]
integer(0)

[[7]]
[1] 64

[[8]]
integer(0)

[[9]]
[1] 81

[[10]]
integer(0)

 round()是四舍五入函數:

> x = seq(1,20,3)
> x = sqrt(x)
> x
[1] 1.00000 2.00000 2.64575 3.16228 3.60555 4.00000
[7] 4.35890
> round(x)
[1] 1 2 3 3 4 4 4

 

3. 實例:計算這每行數據y值的樣本方差

library(readxl)
data = read.csv("5.13.csv")
list = apply(data[,5:7],1,sample_var)
list

  

 

參考:https://www.jianshu.com/p/8e04245bfe6d;<---更多變形函數:lapply,sapply,tapply,


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM