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