2017-01-03 23 views
-2

私はRクラスのタスクを持っていました:変数good_monthsを作成し、AirPassengersの値だけを追加してください。 このRコードはどのように機能しますか?

good_months <- NA 
month <- as.vector(AirPassengers) 

i = 1 
for(i in i:(length(month)-1)){ 
    if(month[i+1] > month[i]){ 
    good_months[i] <- month[i+1] 
    i =+ 1} else {i =+ 1} 
} 

しかし、私は、このタスクは、この方法で完了することができることを言われた:私は、forループで、このタスクを完了し

good_months <- AirPassengers[-1][AirPassengers[-1] > AirPassengers[-144]] 

このコードは同じになり、それが単純ませんが、私ドンそれがどのように動作するのか理解できません。説明できますか?

+1

さらに簡単なAirPassengers [c(FALSE、diff(AirPassengers)> 0)] '。全体を理解するためにコードを1つずつ実行してみてください。 –

+6

FWIWほとんどの人は、Rの 'for'ループを使ってその断片的なベクトルビルドをしたいと思っています。それは非常に遅く非常に遅くなります:-) Rで始まる人にとって最も難しいものの一つは、純粋に手続き型言語か、Pythonのようなリストアされていない言語から)は、ベクトル化された操作の概念です。あなたはベクトル化されたオペレーションの力を完全に理解するためにRにニューロンを書き直させる必要があります。 – hrbrmstr

答えて

9

この意味は?

class(AirPassengers) 
## [1] "ts" 

それを見てみましょう:この方法でそれをインデックス作成

AirPassengers 
##  Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec 
## 1949 112 118 132 129 121 135 148 148 136 119 104 118 
## 1950 115 126 141 135 125 149 170 170 158 133 114 140 
## 1951 145 150 178 163 172 178 199 199 184 162 146 166 
## 1952 171 180 193 181 183 218 230 242 209 191 172 194 
## 1953 196 196 236 235 229 243 264 272 237 211 180 201 
## 1954 204 188 235 227 234 264 302 293 259 229 203 229 
## 1955 242 233 267 269 270 315 364 347 312 274 237 278 
## 1956 284 277 317 313 318 374 413 405 355 306 271 306 
## 1957 315 301 356 348 355 422 465 467 404 347 305 336 
## 1958 340 318 362 348 363 435 491 505 404 359 310 337 
## 1959 360 342 406 396 420 472 548 559 463 407 362 405 
## 1960 417 391 419 461 472 535 622 606 508 461 390 432 

は、オブジェクトの振る舞いを変更します。

AirPassengers[-1] 
## [1] 118 132 129 121 135 148 148 136 119 104 118 115 126 141 135 125 149 
## [18] 170 170 158 133 114 140 145 150 178 163 172 178 199 199 184 162 146 
## [35] 166 171 180 193 181 183 218 230 242 209 191 172 194 196 196 236 235 
## [52] 229 243 264 272 237 211 180 201 204 188 235 227 234 264 302 293 259 
## [69] 229 203 229 242 233 267 269 270 315 364 347 312 274 237 278 284 277 
## [86] 317 313 318 374 413 405 355 306 271 306 315 301 356 348 355 422 465 
## [103] 467 404 347 305 336 340 318 362 348 363 435 491 505 404 359 310 337 
## [120] 360 342 406 396 420 472 548 559 463 407 362 405 417 391 419 461 472 
## [137] 535 622 606 508 461 390 432 

class(AirPassengers[-1]) 
## [1] "numeric" 

あなたが見ることができるように、それは時系列Aを作りました最初の要素を削除しました。

length(AirPassengers) 
## [1] 144 

これは最後の要素を削除します

AirPassengers[-144] 
## [1] 112 118 132 129 121 135 148 148 136 119 104 118 115 126 141 135 125 
## [18] 149 170 170 158 133 114 140 145 150 178 163 172 178 199 199 184 162 
## [35] 146 166 171 180 193 181 183 218 230 242 209 191 172 194 196 196 236 
## [52] 235 229 243 264 272 237 211 180 201 204 188 235 227 234 264 302 293 
## [69] 259 229 203 229 242 233 267 269 270 315 364 347 312 274 237 278 284 
## [86] 277 317 313 318 374 413 405 355 306 271 306 315 301 356 348 355 422 
## [103] 465 467 404 347 305 336 340 318 362 348 363 435 491 505 404 359 310 
## [120] 337 360 342 406 396 420 472 548 559 463 407 362 405 417 391 419 461 
## [137] 472 535 622 606 508 461 390 

R論理演算子はそう

AirPassengers[-1] > AirPassengers[-144] 
## [1] TRUE TRUE FALSE FALSE TRUE TRUE FALSE FALSE FALSE FALSE TRUE 
## [12] FALSE TRUE TRUE FALSE FALSE TRUE TRUE FALSE FALSE FALSE FALSE 
## [23] TRUE TRUE TRUE TRUE FALSE TRUE TRUE TRUE FALSE FALSE FALSE 
## [34] FALSE TRUE TRUE TRUE TRUE FALSE TRUE TRUE TRUE TRUE FALSE 
## [45] FALSE FALSE TRUE TRUE FALSE TRUE FALSE FALSE TRUE TRUE TRUE 
## [56] FALSE FALSE FALSE TRUE TRUE FALSE TRUE FALSE TRUE TRUE TRUE 
## [67] FALSE FALSE FALSE FALSE TRUE TRUE FALSE TRUE TRUE TRUE TRUE 
## [78] TRUE FALSE FALSE FALSE FALSE TRUE TRUE FALSE TRUE FALSE TRUE 
## [89] TRUE TRUE FALSE FALSE FALSE FALSE TRUE TRUE FALSE TRUE FALSE 
## [100] TRUE TRUE TRUE TRUE FALSE FALSE FALSE TRUE TRUE FALSE TRUE 
## [111] FALSE TRUE TRUE TRUE TRUE FALSE FALSE FALSE TRUE TRUE FALSE 
## [122] TRUE FALSE TRUE TRUE TRUE TRUE FALSE FALSE FALSE TRUE TRUE 
## [133] FALSE TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE TRUE 

が互いに各ペアを比較論理ベクトルを作成し、ベクトル化されています。

AirPassengers[-1][AirPassengers[-1] > AirPassengers[-144]] 
## [1] 118 132 135 148 118 126 141 149 170 140 145 150 178 172 178 199 166 
## [18] 171 180 193 183 218 230 242 194 196 236 243 264 272 201 204 235 234 
## [35] 264 302 229 242 267 269 270 315 364 278 284 317 318 374 413 306 315 
## [52] 356 355 422 465 467 336 340 362 363 435 491 505 337 360 406 420 472 
## [69] 548 559 405 417 419 461 472 535 622 432 

これは、最初の要素を持たない時系列の数値ベクトルを作成し、論理的にベクトルコンポーネントを含める/除外できるという事実を使用します。

+0

すばらしい説明、ありがとう – fl00r

関連する問題