这个R代码是如何工作的?

这个R代码是如何工作的?,r,R,我在R-Class中有一个任务:创建一个变量good_months,并只添加来自AirPassenger的值,这些值比前一个值大。我使用for循环完成了此任务: 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

我在R-Class中有一个任务:创建一个变量good_months,并只添加来自AirPassenger的值,这些值比前一个值大。我使用for循环完成了此任务:

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}
}
好几个月是什么

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"
如您所见,它使时间序列成为一个数字向量,并删除了第一个元素:

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
这将删除最后一个元素:

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

这将创建一个没有第一个元素的时间序列的数字向量,并使用您可以在逻辑上包含/排除向量分量的事实。

更简单的
AirPassengers[c(FALSE,diff(AirPassengers)>0)]
。试着一段一段地运行代码来理解整个过程。FWIW你几乎不想用R中的
for
循环来进行逐段向量构建。它变得非常慢,非常快:-)对于刚开始使用R的人来说,这是最难处理的事情之一(特别是如果它们来自纯过程语言或像python这样的低级语言)是矢量化操作的概念。你需要让R重写你的神经元来充分理解矢量化操作的力量。