R_Language 板


LINE

你们在讨论的两个operator: <- 和 = 已经把两种功能混淆了。 一个是replacement function, 另一个是argument passing 当直接在R的console使用如: a <- 1 a = 1 这个是一种replacement function 他除了会把1存到a 之外,还会回传1 只是这种回传是把回传值隐藏的 你可以试试看跑: (a <- 1) (a = 1) 他会把隐藏的值显示出来 你也可以自己写回传隐藏值的函数: f1 <- function() 1 f2 <- function() invisible(1) # 隐藏回传值 f1() f2() 而当你在参数使用 <- 和 = ,又完全不同了 R 传递参数的时候,会依序比对: 1. full name 2. partial name 3. 位置 例如: f <- function(a, b, c) { print(a) print(b) print(c) } f(b=1,2,3) # a = 2, b = 1, c = 3 f(b<-1, 2, 3) # a = 1, b = 2, c = 3 = 在这里已经不再是replacement function,而是用於指定参数名称 <- 则还是replacement function, 所以R在解析f(b<-1, 2, 3)时 会先执行replacement function: b <- 1 由於函数回传值是1, 所以执行後就变成f(1, 2, 3) R 再用位置来传递参数,所以a=1, b=2, c=3 你可以多尝试几次。 另外想要更详细的解释,可以参考: - Taiwan R User Group 聚会的R-advanced的影片 - hadley的R advanced电子书: http://github.com/hadley/devtools/wiki (希望没背错 XD) ※ 引述《goddirk (dirk)》之铭言: : ※ 引述《zhuangz (zhuangz)》之铭言: : : 例如以下指令, : : 无法以 : : 取代. : : 其效果等同下列三项指令 : 所以是参数要在指令里面宣告用<-,外部宣告用=? : 还是说整个程式里面=出现的时候都用<-来取代就可以了? : 还是说有一定要用=的地方吗? : 刚刚跑了一下你上面讲的部分.....看来我之前在run的时候有错是错这个东西了 -- 欢迎加入 Taiwan R User Group : http://www.facebook.com/Tw.R.User 我们每周一都有在「政大公企中心(台北市金华街187号)西楼WB05」 举办Machine Learning / Data Mining Monday: 报名 http://www.meetup.com/Taiwan-R/ 聚会影片 https://www.youtube.com/user/TWuseRGroup --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 210.176.50.18
1F:→ clickhere:不全对. 04/12 09:54
2F:→ clickhere:1. 这跟 invisible 无关. 反而更混淆. 04/12 09:55
3F:→ clickhere:2. <- 和 = 都可以是 replacement function, 但 = 需要 04/12 09:56
4F:→ clickhere:用在完整的 expression 中. help("=") 04/12 09:56
5F:→ clickhere:3. 在 function 中的参数都算 expression, 会先被 eval 04/12 09:57
6F:→ clickhere:於 function 内部的 environment 中. 故 b <- 1, 已先 04/12 09:58
7F:→ clickhere:assign 在 function 内. 之後才数参数 match by order. 04/12 09:59
8F:→ clickhere: 外 04/12 10:00
9F:推 clickhere:真不晓得是谁发明 "=" 可以用在 global assignment 的 04/12 10:03
10F:推 Chris7462:'<-' 跟 '=' 都是 replacement function 04/12 10:04
11F:→ Chris7462:但是 '=' 写在 function arg 内的话是 argument passing 04/12 10:05
12F:推 clickhere:4. 请用 assignment. replacement 指得是 help("[<-") 04/12 10:05
13F:→ Chris7462:跟 invisible 无关 04/12 10:05
14F:→ Chris7462:原来上面已经有人推了 Orz 04/12 10:06
15F:→ clickhere:这是两个不同的 function.y 04/12 10:06
16F:推 goddirk:推两个C大的解释 04/12 13:47
感谢两位C 大的指教 关於invisible的部份我的确是画蛇添足了。我原本是想强调: assignment or replacement function 都是会有回传值的, 只是平常被invisible给遮掩住了, 所以看不到。 关於第2点,我文中的意思就是说两者在console中一般都是replacement function 第4点关於名词的部份,我没有很注意到这部份的细节,多谢提醒。 至於以下的讨论可能不适合初学者了,只是我个人对於名词,以及R底层行为的研究。 关於clickhere的第3点,我认为至少在R 2.15版本上是不正确。 范例: f <- function(a, b, c) { print(a);print(b);print(c) } 如果照clickhere的看法,f(b<-1, b<-2, b<-3) 会显示什麽呢? 如果是透过把expression放到函数内的environment的方式,那应该是跑不出来的,因为 a, c不存在(或是会找到baseenv()[["c"]])。 但是实际上他会跑出: [1] 1 [1] 2 [1] 3 也许我讲的也不一定对,但是至少是和执行结果相符的: R 会依序执行: "b <- 1", "b <- 2", "b <- 3" 然後把3个执行结果的回传值(1, 2, 3)依照位置pass给f, 所以就得到上述结果 同时 b <- 3 是在.GlobalEnv上解析的,不是在函数内。 跑完之後.GlobalEnv[["b"]]会变成3 这部份的确和Hadley的R advanced 中写的不符合,有空我可能再去Rd mailing list请教 (他的看法也是expression会在函数环境内解析) (这部份是我弄错了,请看後面) 若有错误还请多多指教 谢谢 ※ 编辑: Wush978 来自: 114.45.149.143 (04/12 14:17) ※ 编辑: Wush978 来自: 114.45.149.143 (04/12 14:20) 再度更正一下最後一段,我记反Hadley的讲法了,所以应该真的是clickhere弄错了 R passing argument 的时候,expression的执行环境是这样子决定的: 函数的预设值,会在函数的环境内执行。 外界pass给函数的expression,会在外界的环境执行。 Example: f <- function(a = ls()) f() f(ls()) 结果不同喔 PS. 由於不想扯到lazy evaluation, 所以我在执行expression的时间点并没有讲正确。 有兴趣的我们可以继续讨论 ※ 编辑: Wush978 来自: 114.45.149.143 (04/12 14:28) ※ 编辑: Wush978 来自: 114.45.149.143 (04/12 14:30) ※ 编辑: Wush978 来自: 114.45.149.143 (04/12 14:36)
17F:推 EXILESPACER:精采! 04/12 21:58
18F:推 laba1014:这串好赞 04/14 12:37







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:e-shopping站内搜寻

TOP