R语言——符号函数(向量化)

目录

  • 引言
  • 函数
    • if函数
    • 逻辑函数
  • 总结

引言

本文编写的函数是符号函数sgn,符号函数的定义如下:
f ( x ) = { 1 , x > 0 0 , x = 0 − 1 , x < 0 f(x)=\left\{ \begin{aligned} 1 ,x >0 \\ 0, x = 0 \\ -1, x <0\\ \end{aligned} \right. f(x)=1,x>00,x=01,x<0
R语言内部没有这个内置函数。我们可以通过function、if函数很简单的定义自己的符号函数,因为if函数不能向量化判断,所以很难写成向量化的函数。在写自己的算法的时候如果表达式中用到符号函数就会在模拟的时候变得很慢。本文就从逻辑函数的角度来定义符号函数。

函数

if函数

非向量化的

> sgn_x <- function(x){
     
+   if(x > 0) return(1)
+   else if(x < 0) return(-1)
+   else return(0)
+ }
> x = -5:5
> x
 [1] -5 -4 -3 -2 -1  0  1  2  3  4  5
> sgn_x(x)
[1] -1
Warning messages:
1: In if (x > 0) return(1) else if (x < 0) return(-1) else return(0) :
  条件的长度大于一,因此只能用其第一元素
2: In if (x < 0) return(-1) else return(0) :
  条件的长度大于一,因此只能用其第一元素
> sgn_x(10.5)
[1] 1
> sgn_x(0)
[1] 0
> sgn_x(-0.5)
[1] -1

向量化的

> sgn_v <- function(x){
     
+   for(i in 1:length(x)) x[i] <- sgn_x(x[i])
+   return(x)
+ }
> x = -5:5
> x
 [1] -5 -4 -3 -2 -1  0  1  2  3  4  5
> sgn_v(x)
 [1] -1 -1 -1 -1 -1  0  1  1  1  1  1

逻辑函数

> sgn <- function(x){
     
+   2*(x > 0) + (x == 0) - 1
+ }
> x = -5:5
> x
 [1] -5 -4 -3 -2 -1  0  1  2  3  4  5
> sgn(x)
 [1] -1 -1 -1 -1 -1  0  1  1  1  1  1

总结

可以看出sgn_v这是一个伪向量化的函数,实际还是循环

你可能感兴趣的:(R语言入门,R语言,符号函数,向量化操作)