[问题] Magrittr 小问题

楼主: swedrf0112 (M)   2016-06-28 15:00:13
[问题类型]:程式咨询
[软件熟悉度]: 入门
[问题叙述]: magrittr 的 pipe 可以抓到最一开始的物件吗?
[程式范例]:
> x=runif(5,0,1)
>
> ## 将向量内的值排序
> x[order(x)]
[1] 0.1710200 0.2608820 0.2966179 0.5351188 0.9172524
>
> ## 想请问除了下面的方法外,最后一个 pipe 该怎么下?
> x %>% order %>% x[.]
[1] 0.1710200 0.2608820 0.2966179 0.5351188 0.9172524
先谢谢各位!!
######
不好意思,我重新说明一次我的问题,
其实原本的问题是,在问题中的 x ,有些时候是一些经过处理的物件,
给我现在遇到的例子 :
# > head(season,20)
# [1] "2000-01" "2001-02" "2002-03" "2003-04" "2004-05" "2005-06" "2006-07"
"2007-08" "2008-09" "2009-10"
# [11] "2010-11" "2011-12" "2012-13" "2013-14" "2014-15" "2015-16" "1996-97"
"1997-98" "1998-99" "1999-00"
我想要针对 season 向量的 unique 进行排序,以一般的写法,我写成 :
# > unique(season)
# [1] "2000-01" "2001-02" "2002-03" "2003-04" "2004-05" "2005-06"
# [7] "2006-07" "2007-08" "2008-09" "2009-10" "2010-11" "2011-12"
# [13] "2012-13" "2013-14" "2014-15" "2015-16" "1996-97" "1997-98"
# [19] "1998-99" "1999-00"
unique(season)[order(as.numeric(substr(unique(season),1,4)))]
但是因为我觉得在里面 season 必须被 unique 两次,很浪费计算资源,
也可以先令一个 y=unique(season),把原本的式子 unique(season) 改成 y , 但这样
会浪费内存记这一个暂时的向量
所以我想用 magrittr 写,所以我才以刚刚这个简单的例子,想问是否可以呼叫 pipe 最
一开始的物件,因为我在 magrittr 的 help 里没找到这件事XD
season %>% unique %>% substr(.,1,4) %>% as.numeric %>% order %>% "这边应该要呼
叫最一开始的 season"
针对一开始没把问题说清楚,跟 C 大与各位致歉,谢谢!
也请各位指正里面的想法是否有错误,或许根本就不会发生我想的事XDD
[环境叙述]:
[关键字]: Magrittr
作者: celestialgod (天)   2016-06-28 15:12:00
x %>% order %>% {x[.]}
楼主: swedrf0112 (M)   2016-06-28 15:27:00
谢谢c大, 我想问的是,可以不在最后ㄧ个pipe再呼叫ㄧ次 x 吗? 不好意思没表达清楚!
作者: celestialgod (天)   2016-06-28 15:27:00
x %>% {.[order(.)]}这样吗只要隔了一个pipe就不能往回找前一个pipeR写法: x %>>% (~ order_x <-order(x)) %>>%'['(order_x)详细参考http://tinyurl.com/zx9pz76只是排序,为什么不用x %>% sort?
楼主: swedrf0112 (M)   2016-06-28 15:58:00
ok 谢谢c 大! 我会仔细看ㄧ下pipeR 感谢!!
作者: celestialgod (天)   2016-06-28 16:01:00
储存暂存变量跟计算应该是一个trade-off我觉得应该很难避免QQ
楼主: swedrf0112 (M)   2016-06-28 16:47:00
没错 资料量ㄧ大又是另ㄧ个问题... 囧

Links booklink

Contact Us: admin [ a t ] ucptt.com