R语言学习常用函数

2024-07-13 19:16:54 浏览数 (2)

1、which()函数

代码语言:R复制
> a <- c( 1,5,7,4,9 )
> which ( a == 4 ) #返回a等于4的元素的位置,位置为4
[1] 4
> which(a>5)     #返回a大于5的元素的位置,第3与第5是大于5的
[1] 3 5

2、subset()函数

subset()函数是返回符合条件的元素,但是会忽略NA值。注意:条件应该为逻辑值,否则会报错

代码语言:R复制
> x <- c(1,3,7,NA,10) #一个含有NA值的向量
> x[x>6] #用向量的索引查看下x>6的元素
[1] 7,NA,10
>subset(x,x>6)
[1]7,10

3、ifelse()函数

ifelse(x,a,b)函数判断元素x是否符合条件,如果符合,返回a,如果不符合返回b,其中x为逻辑值

代码语言:R复制
> X <- 1:10
> Y<- ifelse(X%%2==0,1,0) #如果为偶数,返回1,奇数返回0(X %% 2 == 0:这里的%%是取模运算符,用来计算X中每个元素除以2的余数。X %% 2 == 0这个表达式检查X中的每个元素是否能被2整除(即余数是否为0)。
ifelse(X %% 2 == 0, 1, 0):对于X中的每个元素,如果它能被2整除(即X中的偶数),则Y中的对应位置为1;如果它不能被2整除(即X中的奇数),则Y中的对应位置为0。)
> Y
[1] 0 1 0 1 0 1 0 1 0 1

进阶版

sample()函数在R中用于随机抽样。

c(5,6)是一个向量,包含两个元素:5和6。这是抽样的总体或池。

50表示要抽取的样本大小,即从c(5,6)中随机抽取50个元素。

replace = T参数设置为T(或TRUE),表示抽样是带放回的,即每次抽取一个元素后,该元素会被放回池中,因此下一次抽样时它仍有可能被再次抽取。如果设置为F(或FALSE),则表示抽样是不带放回的。

代码语言:R复制
> temp0 <- sample(c(5,6),50,replace=T)
> temp0
[1] 5 5 5 5 6 5 5 5 5 5 5 6 6 5 5 6 6 6 5 5 5 6 5 5 5 5 6 6 5 5 5 6
[33] 6 6 6 6 5 5 5 6 6 5 6 6 6 5 6 6 5 6
> #计算下temp0中5的出现次数
> #方法一
> temp1 <-ifelse(temp0==5,1,0)#让5等于1,不为5的等于0
> sum(temp1)
[1] 28
> #方法二
> temp2 <-temp0
> temp2[temp2==5] <- 1
> temp2[temp2==6] <- 0
> sum(temp2)
[1] 28
> #方法三
> temp3 <- which(temp0==5)
> length(temp3)
[1] 28
> length(which(temp0==5))
[1] 28

向量相等

有很多种方法判断两个向量是否相等

1、all()函数,返回逻辑值

2、identical()函数,判断两个向量是否相等,返回逻辑值

代码语言:R复制
> a1 <- c(1,4,5,9)
> a2 <- c(1,4,5,9)
> a3 <- c(3,4,5,9)
> a4 <- 1:5
> a5 <- c(1,2,3,4,5)
> all(a1,a2)
[1] TRUE
Warning messages:
1: In all(a1, a2) : 将种类为'double'的参数强迫转化为逻辑值
2: In all(a1, a2) : 将种类为'double'的参数强迫转化为逻辑值
> all(a1,a3)
[1] TRUE
Warning messages:
1: In all(a1, a3) : 将种类为'double'的参数强迫转化为逻辑值
2: In all(a1, a3) : 将种类为'double'的参数强迫转化为逻辑值
> identical(a1,a2)
[1] TRUE
> identical(a1,a3)
[1] FALSE
> identical(a4,a5)
[1] FALSE

控制语句

ifelse()函数,ifelse(x,a,b),如果x为TRUE,则执行a,否则执行b

for循环

for(i in x){......},i会循环取遍x中的值

代码语言:R复制
> for (i in c(1,5,7))
    {
    print(i^2)
    }
[1] 1
[1] 25
[1] 49

next与break

代码语言:R复制
>  for (i in c(1,5,7))
   {
     ifelse(i<=5,print(i^2),next)
   }
[1] 1
[1] 25
>  for (i in c(1,5,7,8))
   {
     ifelse(i<=7,print(i^3),break)
   }
[1] 1
[1] 125
[1] 343

which()函数

代码语言:R复制
> a<- 3
> while(a==3)
  {
    print(a 1)
    a<- FALSE
    }
[1] 4

repeat()函数

重复函数,搭配if、break使用,不用break跳出程序将陷入死循环

代码语言:R复制
> a <- 1
> repeat
  {
    a<- a 1
    if(a>7)
    {
      break
    }
  }
> a
[1] 8

if...else...语句

代码语言:R复制
> for (i in c(1,2,3,4,5))
  {
   if(i<=3)
   {
     print(i^2)
   }else
   {
     print(i^3)
   }
  }
[1] 1
[1] 4
[1] 9
[1] 64
[1] 125

逻辑函数学过Python语言,接受非常快,嘻嘻

逻辑运算符

&& 与

|| 或

! 非

函数返回值

1.利用return返回结果

2.如果灭有return则返回语句最后一行的执行结果

代码语言:R复制
> F <- function(a)
  {
    k<- a
    return(k)
  }
> F(3)
[1] 3
> f1 <- function(a,b)
  {
    d <- a-b
    c <- a b
    c
  }
> f1(3,6)
[1] 9

全局变量与局部变量

全局变量理解为函数内部无法改变的变量,局部变量就是在函数内部的变量,具有临时性

代码语言:R复制
> b <- 5 #全局变量
> f3 <- function(x)
  {
    b<- 7 #局部变量,不会影响外面的b
    b1 <- x
    b2 <- b b1
    return(b2)
  }
> f3(6)
[1] 13
> b
[1] 5
> b1 #在函数中是局部变量,函数返回结果后被删除,所以报错
错误: 找不到对象'b1'

0 人点赞