R软件及统计分析因子列表数据框程序设计结构.ppt

R软件及统计分析因子列表数据框程序设计结构.ppt

  1. 1、本文档共77页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
R软件及统计分析因子列表数据框程序设计结构

参数(自变量) 函数可以带虚参数(形式自变量)。S函数调用方式很灵活,例如,如下函数: fsub =function(x, y) x-y 有两个虚参数x和y,我们用它计算100-45,可以调用fsub(100,45),或fsub(x=100,y=45) ,或fsub(y=45, x=100),或fsub(y=45, 100)。即调用时实参与虚参可以按次序结合,也可以直接指定虚参名结合。实参先与指定了名字的虚参结合,没有指定名字的按次序与剩下的虚参结合。 函数在调用时可以不给出所有的实参,这需要在定义时为虚参指定缺省值。例如上面的函数改为: fsub = function(x, y=0) x-y 则调用时除了可以用以上的方式调用外还可以用fsub(100),fsub(x=100)等方式调用,只给出没有缺省值的实参。 即使没有给虚参指定缺省值也可以在调用时省略某个虚参,然后函数体内可以用missing() 函数判断此虚参是否有对应实参,如: trans = function(x, scale){ if(!missing(scale)) x = scale*x ………… } 此函数当给了scale的值时对自变量x乘以此值,否则保持原值。这种用法在其它语言中是极其少见的,S可以实现这一点是因为S的函数调用在用到参数的值时才去计算这个参数的值(称为“懒惰求值”),所以可以在调用时缺少某些参数而不被拒绝。 S函数还可以有一个特殊的“...”虚参,表示所有不能匹配的实参,调用时如果有需要与其它虚参结合的实参必须用“虚参名=”的格式引入。例如: f =function(...){ for(x in list(...)) cat(min(x), \n)} f(c(5,1,2), c(9, 4, 7)) 1 4 作用域 函数的虚参完全是按值传递的,改变虚参的值不能改变对应实参的值。例如: x = list(1, abc) x f =function(x) x[[2]] - !! f(x) x 函数体内的变量也是局部的,对函数体内的变量赋值当函数结束运行后变量值就删除了,不影响原来同名变量的值。例如: x = 2 f = function(){print(x) ; x= 20 } f() [1] 2 x [1] 2 这个例子中原来有一个变量x值为2,函数中为变量x赋值20,但函数运行完后原来的x值并未变化。但是也要注意,函数中的显示函数调用时局部变量x还没有赋值,显示的是全局变量x 的值。这是S编程比较容易出问题的地方:你用到了一个局部变量的值,你没有意识到这个局部变量还没有赋值,而程序却没有出错,因为这个变量已有全局定义。 程序调试 S-PLUS和R目前还不象其它主流程序设计语言那样具有单步跟踪、设置断点、观察表达式等强劲的调试功能。调试复杂的S程序,可以用一些通用的程序调试方法,另外S也提供了一些调试用函数。 对任何程序语言,最基本的调试手段当然是在需要的地方显示变量的值。可以用print() 或cat()显示。例如,我们为了调试前面定义的larger()函数,可以显示两个自变量的值及中间变量的值: larger - function(x, y){ cat(x = , x, \n) ;cat(y = , y, \n); y.is.bigger =(yx); cat(y.is.bigger = , y.is.bigger, \n) ;x[y.is.bigger] = y[y.is.bigger] x } S提供了一个browser()函数,当调用时程序暂停,用户可以查看变量或表达式的值,还可以修改变量。例如: larger= function(x, y){ y.is.bigger - (yx); browser() ;x[y.is.bigger] =y[y.is.bigger]; x ;} 我们运行此程序: larger(c(1,5), c(2, 4, 9)) 退出R的browser()菜单可用c(在S中用return())。在R的browser()状态下用n命令可以进入单步执行状态,用n或者回车可以继续,用c可以退出。 R提供了一个debug()函数,debug(f)可以打开对函数f()的调试,执行到函数f时自动进入单步执行的browser()菜单。用undebug(f)关闭调试。 Warning in y x : longer object length is not a multiple of shorter object length Called from: larger(c(1, 5), c(2, 4, 9)) Browse[1] y [1] 2 4 9

文档评论(0)

zhuliyan1314 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档