R基础学习(三)函数

碎碎念

没有碎碎念。

已有的基本函数

1、数学函数:
对数据进行一些数值上的操作。当这些函数运用于数值向量、矩阵或者数据框上时,会作为独立的值进行计算。

在这里插入图片描述

2、统计函数:

在这里插入图片描述
除了必要的要处理的数据,还有一些可以选择的参数。例如:

x <- c(1,4,6,3,9,3,2,6,7,NA,5,3,1,2,8)
mean(x)
<返回值> NA
mean(x,na.rm=TRUE)
<返回值> 4.285714

标准化

标准化的意义是消除变量的量纲和范围差异对变量之间分析的影响。R中的scale()指的是标准差标准化法,将数据映射成为均值为0,标准差为1的数据。

x <- rexp(20,10) * 10 # 生成20个指数分布的随机数
mean(x)
<返回值> 0.9437997
sd(x)
<返回值> 0.8587231

y <- scale(x)
mean(y)
<返回值> 1.076613e-17
sd(y)
<返回值> 1

y <- scale(x) * 3 + 10
mean(y)
<返回值> 10
sd(y)
<返回值> 3

# 指定部分列而不是整个矩阵或数据框进行标准化
newdata <- transform(mydata, myvar=scale(myvar)*10+50)

3、概率函数:
通常用于生成特征已知的模拟数据,或者计算概率值。
在这里插入图片描述
概率函数形为[dpqr]分布名称,d=密度函数,p=分布函数,q=分位数函数,n=生成随机数。例如:rnorm生成满足正态分布的随机数,dnorm从正态分布中抽样分布密度数据。生成多元函数需要调用MASS包中的mvrnorm函数,参数为生成数目,mean=均值,sigma=协方差矩阵。

# 生成可以重现的随机数
set.seed(1234)
runif(5)
<返回值> 0.1137034 0.6222994 0.6092747 0.6233794 0.8609154

4、矩阵运算:AB为矩阵,xb为向量,k为标量。还有一些包可以用:Matrix、matrixStats等。
在这里插入图片描述在这里插入图片描述

5、字符处理:
在这里插入图片描述
6、其他实用函数

在这里插入图片描述

x <- matrix(round(rnorm(20) * 5 + 10), nrow=4)
x
<返回值>
     [,1] [,2] [,3] [,4] [,5]
[1,]   13    6   10    5    8
[2,]    7    8   15    6    8
[3,]    7    5    9   22   12
[4,]    7    6    7   11    7

mean(x)
<返回值> 8.95
apply(x, 1, mean)
<返回值> 8.4  8.8 11.0  7.6
apply(x, 2, mean)
<返回值> 8.50  6.25 10.25 11.00  8.75
apply(data, dim, fun) # 数据(矩阵、数据框),应用的维度,使用的函数
sapply(X, FUN, # X数据(矩阵、数据框、列表)
       simplify = TRUE, # 指定输入的数据类型
       USE.NAMES = TRUE) 

控制流

1、循环

for (var in seq) {statement1; statement2} # var不在seq范围内则停止执行
while (cond) {statement} # 直到不满足cond时,停止执行

2、判断

if (cond) {statement}
if (cond1) {statement} else if (cond2) {statement}
ifelse(cond, statement1, statement2) # cond成立,执行statement1;cond为FALSE,执行statement2

3、分支
switch函数根据第一个参数选择执行的语句,且顺序扫描,例如,expr满足情况1,则执行statement1,并跳出语句,不再执行switch后面的语句;expr不满足任何情况,则扫描到最后,执行statement3。

switch(expr, 情况1=statement1, 情况2=statement2, statement3)
# 示例一
for (i in c("sad", "happy")) {
  print(
    switch(i,
           happy = "I am glad you are happy",
           afraid = "There is nothing to fear",
           sad = "Cheer up",
           angry = "Calm down now"
           )
  )
} 
<返回值>
[1] "Cheer up"
[1] "I am glad you are happy"

# 示例二
switch("bad",
       happy = "I am glad you are happy",
       afraid = "There is nothing to fear",
       sad = "Cheer up",
       angry = "Calm down now",
       "Sorry I don't understand")
<返回值> "Sorry I don't understand"

用户自定义函数

# 定义
myfun <- function(arg1, arg2=TRUE, agr3=7){
 statements1;
 statements2;
 return(object) # 有这一条指令则最后函数会返回一个值
}

# 调用
y <- myfun(x, arg2=FALSE)

示例一:
定义一个函数用来计算数据对象的集中趋势和散布情况。该函数可以选择性给出参数统计值(均值和标准差)和非参数统计值(中位数和绝对中位差),结果以列表的形式存放。另外,用户还可以选择是否将相关值打印出来。

mystats <- function(x, parametric=TRUE, print=TRUE){ # 定义函数名与参数
    if (parametric){
        center <- mean(x);
        spread <- sd(x)
    } else {
        center <- median(x);
        spread <- mad(x)
    }
    # 以下决定是否打印
    if (print & parametric) {
        cat("Mean=", center, "\n", "SD=", spread, "\n")
    } else if (print & ! parametric) {
        cat("Median=", center, "\n", "MAD=", spread, "\n")
    }
    result <- list(center=center, spread=spread)
    return(result)
}

调用:

set.seed(1234)
x <- rnorm(200)
y <- mystats(x)
<返回值>
Mean= -0.05775928 
 SD= 1.020666 

str(y)
<返回值>
List of 2
 $ center: num -0.0578
 $ spread: num 1.02

y <- mystats(x, parametric=FALSE, print=FALSE)
str(y)
<返回值>
List of 2
 $ center: num -0.172
 $ spread: num 0.987

示例二:
使用switch让用户选择输出当前日期的格式。

mydate <- function(type="long") { # 默认为long
  switch(type,
         long=format(Sys.time(), "%A %B %d %Y"),
         short=format(Sys.time(), "%m-%d-%y"),
         cat(type, "is not a recognized type\n") # 输入不在switch的选择里则执行该条语句
         )
}

调用:

mydate()
<返回值> "星期四 十一月 17 2022"
mydate("short")
<返回值> "11-17-22"
mydate("test")
<返回值> test is not a recognized type

其他

这里记录了一些没有学习过但是出现了的函数。
1、cat,相当于print,用于将字符串输出到屏幕上。
2、format,格式标准化,返回的是字符串。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值