創建一個列表變量,它的第一個元素包含所有從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,
