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'