R: + = (artı bərabərdir) və ++ (plus plus) C ++ / C # / java və s.

R ++ (C ++ / C # / başqaları kimi) += (artı bərabər) və ya ++ (plus plus) konsepsiyasına sahibdir?

112
21 апр. Set SFun28 Apr 21 2011-04-21 05:25 '11 at 5:25 2011-04-21 05:25
@ 7 cavab

Xeyr, bu deyil: R Dil Tərifi: Operatorlar

84
21 апр. Patrick Cuff tərəfindən verilmiş cavab 21 aprel 2011-04-21 05:40 '11 at 5:40 2011-04-21 05:40

@ GregaKešpret'dən sonra bir infix operatoru edə bilərsiniz:

border=0
 `%+=%` = function(e1,e2) eval.parent(substitute(e1 <- e1 + e2)) x = 1 x %+=% 2 ; x 
51
18 февр. cavab 18 yaşına çatmışdır . 2013-02-18 02:49 '13 'da 2:49 2013-02-18 02:49

R increment operator heç bir fikri yoxdur (məsələn, C ++). Ancaq bunları özünüz tətbiq etmək çətin deyil, məsələn:

 inc <- function(x) { eval.parent(substitute(x <- x + 1)) } 

Bu halda, zəng edəcəksiniz

 x <- 10 inc(x) 

Lakin, funksiyanın xidmət məlumatlarına daxil olur, buna görə x <- x + 1 ə özündən daha yavaş gəlir. Səhv etmirəmsə, increment operator kodunu birbaşa bu maşın dili təlimatlarına çevirə biləcəyi üçün kompilyatorla işləməyi asanlaşdırmaq üçün daxil edilmişdir.

30
21 апр. Grega Kešpret tərəfindən verilmiş cavab Apr 21 2011-04-21 05:51 '11 at 5:51 2011-04-21 05:51

10 ilə artım və azalma.

 require(Hmisc) inc(x) <- 10 dec(x) <- 10 
14
21 апр. Wanderer 21 apreldə cavab verdi 2011-04-21 05:34 '11 at 5:34 'da 2011-04-21 05:34

R-də bu əməliyyatlar yoxdur, çünki R (ən) obyektləri dəyişdirilə bilməz. Onlar dəyişmir. Adətən, bir obyekti dəyişdiyinizə baxdığınızda, əslində surəti dəyişdirirsiniz.

12
21 апр. Cavab 21 aprel tarixində hadley tərəfindən verildi 2011-04-21 06:14 '11 at 6:14 'da 2011-04-21 06:14

Biz belə bir şeylərə kömək etmək üçün bir paket hazırladık. Bu barədə daha ətraflı oxuya bilərsiniz: https://happylittlescripts.blogspot.com/2018/09/make-your-r-code-nicer-with-roperators.html

 install.packages('roperators') require(roperators) x <- 1:3 x %+=% 1; x x %-=% 3; x y <- c('a', 'b', 'c') y %+=% 'text'; y y %-=% 'text'; y # etc 
1
25 сент. Cavab Benbob tərəfindən 25 sentyabrda verilir . 2018-09-25 00:44 '18 'də 0:44 2018-09-25 00:44' də

Yalnız əyləncə üçün:

 '+' <- function(e1,e2){ if(missing(e2)) { s_e1 <- substitute(e1) if(length(s_e1) == 2  identical(s_e1[[1]], quote('+'))  length(s_e1[[2]]) == 1){ eval.parent(substitute(e1 <- e1 + 1,list(e1 = s_e1[[2]]))) } else e1 } else .Primitive("+")(e1,e2) } x <- 10 ++x x # [1] 11 

digər əməliyyatlar dəyişmir:

 x + 2 # [1] 13 x ++ 2 # [1] 13 +x # [1] 11 x # [1] 11 
0
25 янв. Cavab Moody_Mudskipper Jan 25 tərəfindən verilir 2019-01-25 17:38 '19 'da 5:38' də 2019-01-25 17:38 'də