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,

原文地址:https://www.cnblogs.com/jiaxinwei/p/11517345.html