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,