2

S-Plus 常用函数参考(示例)

 3 years ago
source link: https://yihui.org/cn/2006/02/23-37-00/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

S-Plus 常用函数参考(示例)

谢益辉 / 2006-02-22


以前编 S-Plus 程序就会经常因为狂用函数而挨骂,其实在 S-Plus 中不多多使用内置函数真是枉费了 AT&T 贝尔实验室和 MathSoft 公司的一片苦心,也忽略了 S-Plus 语言的核心对象:向量和矩阵。每念及此,夜不能寐,就算挣扎着入睡,也会梦见 AT&T 和 MathSoft 哽咽着对我说……

一、数据管理

vector:向量  numeric:数值型向量  logical:逻辑型向量  character:字符型向量  list:列表  data.frame:数据框  c:连接为向量或列表  length:求长度  subset:求子集  seq,sequence:等差序列  rep:重复  NA:缺失值  NULL:空对象  sort,order,unique,rev:排序  unlist:展平列表  attr,attributes:对象属性  mode,typeof:对象存储模式与类型  names:对象的名字属性

> vector("numeric",10)
 [1] 0 0 0 0 0 0 0 0 0 0
> logical(13)
 [1] F F F F F F F F F F F F F
> seq(10,1)
 [1] 10  9  8  7  6  5  4  3  2  1
> unique(rep(1,10))
[1] 1
> rev(seq(10,1))
 [1]  1  2  3  4  5  6  7  8  9 10
> unlist(list(1:6,"Xie Yihui"))
[1] "1"       "2"       "3"       "4"       "5"       "6"       "Xie Yihui"

二、字符串处理

character:字符型向量  nchar:字符数  substr:取子串  format,formatC:把对象用格式转换为字符串  paste,unpaste:连接或拆分  charmatch,pmatch:字符串匹配  grep,sub,gsub:模式匹配与替换

> paste("NO.",1:10)
 [1] "NO. 1"  "NO. 2"  "NO. 3"  "NO. 4"  "NO. 5"  "NO. 6"  "NO. 7"  "NO. 8"
 [9] "NO. 9"  "NO. 10"
> unpaste("Xie|Yihui",sep="|")
[[1]]:
[1] "Xie"

[[2]]:
[1] "Yihui"

complex,Re,Im,Mod,Arg,Conj:复数函数

factor:因子  codes:因子的编码  levels:因子的各水平的名字  nlevels:因子的水平个数  cut:把数值型对象分区间转换为因子  table:交叉频数表  split:按因子分组  aggregate:计算各数据子集的概括统计量  tapply:对 “不规则” 数组应用函数

> factor(c(1,0),labels=c("Male","Female"))
[1] Female Male
> table(rep(1:2,4),c(1:4,rep(8,4)))
  1 2 3 4 8 
1 1 0 1 0 2
2 0 1 0 1 2

+, -, *, /, ^, %%, %/%:四则运算  ceiling,floor,round,signif,trunc,zapsmall:舍入  max,min,pmax,pmin:最大最小值  range:最大值和最小值  sum,prod:向量元素和,积  cumsum,cumprod,cummax,cummin:累加、累乘  sort:排序  approx 和 approxfun:插值  diff:差分  sign:符号函数

> ceiling(5.21)
[1] 6
> cumprod(1:4)
[1]  1  2  6 24
> 911%%711
[1] 200

二、数学函数

abs,sqrt:绝对值,平方根  log, exp, log10, logb:对数与指数函数  sin,cos,tan,asin,acos,atan,atan2:三角函数  sinh,cosh,tanh,asinh,acosh,atanh:双曲函数  beta,lbeta,gamma,lgamma,digamma,trigamma,tetragamma,pentagamma,choose,lchoose:与贝塔函数、伽玛函数、组合数有关的特殊函数  fft,mvfft,convolve:富利叶变换及卷积  polyroot:多项式求根  poly:正交多项式  spline,splinefun:样条差值  besselI,besselK,besselJ,besselY,gammaCody:Bessel 函数  deriv:简单表达式的符号微分或算法微分

> logb(9,base=3)
[1] 2
> deriv(~x^2,"x")
expression({
 .value <- x^2
 .grad <- array(0, c(length(.value), 1), list(NULL, "x"))
 .grad[, "x"] <- 2 * x
 attr(.value, "gradient") <- .grad
 .value
}
) 
> choose(9,7)
[1] 36

array:建立数组  matrix:生成矩阵  data.matrix:把数据框转换为数值型矩阵  lower.tri:矩阵的下三角部分  mat.or.vec:生成矩阵或向量  t:矩阵转置  cbind:把列合并为矩阵  rbind:把行合并为矩阵  diag:矩阵对角元素向量或生成对角矩阵  aperm:数组转置  nrow,ncol:计算数组的行数和列数  dim:对象的维向量  dimnames:对象的维名  row/colnames:行名或列名  %*%:矩阵乘法  crossprod:矩阵交叉乘积(内积)  outer:数组外积  kronecker:数组的 Kronecker 积  apply:对数组的某些维应用函数  tapply:对 “不规则” 数组应用函数  sweep:计算数组的概括统计量  aggregate:计算数据子集的概括统计量  scale:矩阵标准化  matplot:对矩阵各列绘图  cor:相关阵或协差阵  row:矩阵的行下标集  col:求列下标集

> diag(matrix(1:16,4,4,byrow=T))
[1]  1  6 11 16
> a<-matrix(1:4,2)
> a
     [,1] [,2] 
[1,]    1    3
[2,]    2    4
> t(a)
     [,1] [,2] 
[1,]    1    2
[2,]    3    4
> crossprod(a,t(a))
     [,1] [,2] 
[1,]    7   10
[2,]   15   22
> apply(a,2,mean)
[1] 1.5 3.5

四、线性代数

solve:解线性方程组或求逆  eigen:矩阵的特征值分解  svd:矩阵的奇异值分解  backsolve:解上三角或下三角方程组  chol:Choleski 分解  qr:矩阵的 QR 分解  chol2inv:由 Choleski 分解求逆

> eigen(matrix(1:16,4))
$values:
[1]  3.620937e+001 -2.209373e+000 -1.031241e-016  0.000000e+000

$vectors:
           [,1]        [,2]       [,3]     [,4] 
[1,] -0.5642946  0.78566010 -0.5460082 -4.60465
[2,] -0.6390124  0.40284883  0.7280110  5.80620
[3,] -0.7137302  0.02003756  0.1820027  2.20155
[4,] -0.7884480 -0.36277371 -0.3640055 -3.40310

五、逻辑运算

<,>,<=,>=,==,!=:比较运算符  !,&,&&,|,||,xor ():逻辑运算符  logical:生成逻辑向量  all,any:逻辑向量都为真或存在真  ifelse ():二者择一  match,%in%:查找  unique:找出互不相同的元素  which:找到真值下标集合  duplicated:找到重复元素

六、优化及求根

optimize,uniroot,polyroot:一维优化与求根

> f<-function(x) x^2-3*x+2
> uniroot(f,0.001,1.5,2.5)
$root:
[1] 1.999972

$f.root:
[1] -0.00002849252

$nf:
[1] 8

$neg:
[1] 1.999972

$f.neg:
[1] -0.00002849252

$pos:
[1] 2.000033

$f.pos:
[1] 0.00003254289

$message:
[1] "normal termination"

$aux:
list()

$call:
uniroot(f = f, interval = 0.001, lower = 1.5, upper = 2.5)

一、控制结构

if,else,ifelse,switch:分支  for,while,repeat,break,next:循环  apply,lapply,sapply,tapply,sweep:替代循环的函数。

> if(1 == 2) {
           print("1 is equal to 2!")
} else {
           print("1 is not equal to 2!")
}
[1] "1 is not equal to 2!"

function:函数定义  source:调用文件  call:函数调用  .C,.Fortran:调用 C 或者 Fortran 子程序的动态链接库。  Recall:递归调用  browser,debug,trace,traceback:程序调试  options:指定系统参数  missing:判断虚参是否有对应实参  nargs:参数个数  stop:终止函数执行  on.exit:指定退出时执行  eval,expression:表达式计算  system.time:表达式计算计时  invisible:使变量不显示  menu:选择菜单(字符列表菜单)  其它与函数有关的还有:delay,delete.response,deparse,do.call,dput,environment,formals,format.info,interactive,is.finite,is.function,is.language,is.recursive,match.arg,match.call,match.fun,model.extract,name,parse,substitute,sys.parent,warning,machine。

三、输入输出

cat,print:显示对象  sink:输出转向到指定文件  dump,save,dput,write:输出对象  scan,read.table,load,dget:读入

四、工作环境

ls,objects:显示对象列表  rm,remove:删除对象  q,quit:退出系统  .First,.Last:初始运行函数与退出运行函数  options:系统选项  ?,help,help.start,apropos:帮助功能  data:列出数据集

一、统计分布

每一种分布有四个函数:d―density(密度函数),p―分布函数,q―分位数函数,r―随机数函数。比如,正态分布的这四个函数为 dnorm,pnorm,qnorm,rnorm。下面我们列出各分布后缀,前面加前缀 d、p、q 或 r 就构成函数名:

norm:正态,t:t 分布,f:F 分布,chisq:卡方(包括非中心)  unif:均匀,exp:指数,weibull:威布尔,gamma:伽玛,beta:贝塔  lnorm:对数正态,logis:逻辑分布,cauchy:柯西,  binom:二项分布,geom:几何分布,hyper:超几何,nbinom:负二项,pois:泊松  signrank:符号秩,wilcox:秩和,tukey:学生化极差

> rnorm(10)
 [1] -0.3648305  0.4973082  1.8412667 -0.2787127  0.0257934  0.6441702
 [7]  0.5582823 -0.7876886  0.8104928  1.2928385
> pchisq(3.940,10)
[1] 0.04998691

二、简单统计量

sum, mean, var, sd, min, max, range, median, IQR(四分位间距)等为统计量,sort,order,rank 与排序有关,其它还有 ave,fivenum,mad,quantile,stem 等。(注:我在 S-Plus 6.2 中似乎没找到 fivenum 函数,但是 R 中有,大家可以试试看)

三、统计检验

R 中已实现的有 chisq.test,prop.test,t.test。

> t.test(1:10,mu=2)

 One-sample t-Test

data:  1:10 
t = 3.6556, df = 9, p-value = 0.0053 
alternative hypothesis:  mean is not equal to 2 
95 percent confidence interval:
 3.334149 7.665851 
sample estimates:
 mean of x 
       5.5

四、多元分析

cor,cov.wt,var:协方差阵及相关阵计算  biplot,biplot.princomp:多元数据 biplot 图  cancor:典则相关  princomp:主成分分析  hclust:谱系聚类  kmeans:k - 均值聚类  cmdscale:经典多维标度  其它有 dist,mahalanobis,cov.rob

> cancor(matrix(1:80,10),matrix(70:21,10))
$cor:
[1] 1

$xcoef:
          [,1] 
[1,] 0.1100964

$ycoef:
           [,1] 
[1,] -0.1100964

$xcenter:
[1]  5.5 15.5 25.5 35.5 45.5 55.5 65.5 75.5

$ycenter:
[1] 65.5 55.5 45.5 35.5 25.5

五、时间序列

ts:时间序列对象  diff:计算差分  time:时间序列的采样时间  window:时间窗

六、统计模型

lm,glm,aov:线性模型、广义线性模型、方差分析

> x<-rnorm(100)
> y<-rchisq(100,9)
> lm(y~x)
Call:
lm(formula = y ~ x)

Coefficients:
 (Intercept)          x 
    8.180136 0.07897231

Degrees of freedom: 100 total; 98 residual
Residual standard error: 3.540729

抱歉,肚子饿了,得回去睡觉了。今天先写到这里。还有,本文函数大多来自于北京大学李东风老师的教程,在此向原作者的辛苦工作表示致谢。其中有一部分函数我作了小的删改,同时声明一下我所用的版本是 S-Plus 6.2。

偶像曹阳老师 总理的羽绒服……

Disqus Utterances Preferences

© Yihui Xie 2005 - 2020

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK