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

Posted 统计学小王子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了R语言——符号函数(向量化)相关的知识,希望对你有一定的参考价值。

引言

本文编写的函数是符号函数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语言向量化运算:apply函数族用法心得

R语言进阶之4:数据整形(reshape)

R语言 | 向量化操作purrr包

numpy数组符号化与函数向量化

R语言——水仙花数(向量化运算)

R语言——水仙花数(向量化运算)