全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
22958 5
2016-01-16
大家好,学习R的过程中,function(x){}这个函数一直不怎么会用。请问究竟什么情况需要用return,什么时候不需要返回呢?另外function(x){}这里的x要怎么设置,他代表什么,在之后运用这个函数的时候,x向谁取值?
例如在《r语言实战》里面lattice包里面自定义面板函数用到了如下一段代码
mypanel<-function(x,y){
                    panel.xyplot(x,y,pch=19)
                    panel.rug(x,y)
                    panel.grid(h=-1,v=-1)
                    panel.lmline(x,y,col="red",lwd=1,lty=2)
                }
xyplot(mpg~wt|dispacement,data=mtcars,panel=mypanel)

上面的代码中,在xyplot()里用到了自定义的函数,但是xyplot()括号里面并没有说x、y分别是谁啊?而且这里面function()也没有return。

请大家帮忙解答一下吧,谢谢了。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2016-1-16 13:25:57
热汤面皮儿 发表于 2016-1-16 11:22
大家好,学习R的过程中,function(x){}这个函数一直不怎么会用。请问究竟什么情况需要用return,什么时候 ...
当你需要返回函数计算后的结果的时候就用return返回,如果单纯地画图或者存成文件等就不用Return了。你这个例子里面的xyplot和mypanel是两个不同的函数,所以他们的参数不同,不需要x和y。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2016-1-16 20:47:48
亚米UM 发表于 2016-1-16 13:25
当你需要返回函数计算后的结果的时候就用return返回,如果单纯地画图或者存成文件等就不用Return了。你这 ...
首先纠正一个对R常见的误解:R的函数里不是必须用return()来返回结果的。R默认会返回函数体最后一行表达式的求值结果(这也是通常的情况),这点是R作为(偏)函数式语言和其他常见语言比如C++所不同的地方。引用一下R官方文档里的话(大家可以在console里输入?return查看):
If the end of a function is reached without calling return, the value of the last evaluated expression is returned.
在R里几乎所有的表达式都会有返回值,包括赋值(a<-1), 打印(print())。大家可以试试运行以下几个函数:
复制代码
fun0和fun1的返回值被记录在F0和F1中,而base R里的plot函数没有返回值,所以F2的值是NULL。但是lattice,ggplot2这两个绘图包的所有绘图却都是有返回值的(返回值就是一个所有构成图表元素的数据结构,通常是List):
复制代码
return在R里的作用在于从控制流中间(if/else,for循环等)提前返回值并退出函数体。看下面的例子:
复制代码
这是我随便编的一个函数,对1:y的整数进行随机排序,如果某一次随机排序的结果使得第一个数小于5那么会打印一句话,如果五次排序完成都没能满足这个条件那么打印另外一句话(大家不要介意函数的写法哈,要实现相同功能肯定会有更好的办法,这里只是演示return的作用)。
那么fun5(10)就会对1:10的整数进行随机排序,有很大的概率你们会看到if体内return的那句话,然后函数就退出执行了,因此函数体最后的那句话这时是看不到的。而调用fun5(1000)时满足if条件的概率会很小,所以就有很大可能看到函数体最后一行的那句字符串。
P.S. fun5最后我没有用print函数而是直接写了一个字符串,就是想表明字符串也是可以作为表达式存在并且被返回的。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2016-1-17 10:10:19
Xyplot的x,y就是你输入的x和y啊,本来是要分步画很多图,现在只是建立一个函数一次性画出来而已,类似plot函数都是直接画出来的,不需要return
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2016-1-18 00:01:21
马克,明天试试楼上楼上的代码
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2016-1-18 12:03:01
Wavegu 发表于 2016-1-17 10:10
Xyplot的x,y就是你输入的x和y啊,本来是要分步画很多图,现在只是建立一个函数一次性画出来而已,类似plot ...
谢谢你的回答,我发现function里面如果不用x,y,改成a,b这段代码就不能做出图了。也就是function里面的参数要根据后面的代码,这里是xyplot进行设置,而xyplot里面默认了xy的参数在什么位置?不知道我理解的对不对
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群