簡體   English   中英

R 3.6.1 on Ubuntu 18.04.4 LTS - 訪問超出向量定義長度的索引

[英]R 3.6.1 on Ubuntu 18.04.4 LTS - Accessing indexes out of defined length of a vector

我在 R 中有一個向量,比如x包含元素 1 到 20。

> x <- c(1:20)

為什么以下命令的 output 在兩種情況下向量的索引都超出定義的范圍時會有所不同?

> x[0]
integer(0)

> x[5000]
[1] NA

我正在使用具有以下配置的機器。

Distributor ID: Ubuntu
Description:    Ubuntu 18.04.4 LTS
Release:        18.04
Codename:       bionic


R version 3.6.1 (2019-07-05)
Platform: x86_64-conda_cos6-linux-gnu (64-bit)
Running under: Ubuntu 18.04.4 LTS

R 為 1 索引。

用 0 索引意味着“不要 select 任何東西”。

因此,您會得到一個結果,告訴您它是一個大小為 0 的 integer 數組

您可能認為這是無用的,但在線性索引上下文中使用時更有意義:

> x <- 1:10
> r <- as.integer( runif( 10, min = 0, max = 10 ) )
> r
[1] 8 6 7 6 3 0 9 0 8 6
> x[r]
[1] 8 6 7 6 3 9 8 6

結果的長度為 8,因為 0 索引操作已被忽略。

關於 NA,請考慮:

> y <- 1
> y[5] <- 5
> y
[1]  1 NA NA NA  5

換句話說,如果您沒有明確定義元素,則它們被假定為 NA(即“未定義”)。 但是您仍然可以訪問它們,甚至可以分配給以前未定義的索引。

同樣,如果您使用 NA 作為線性索引的一部分,您將得到 NA ,如果您的索引列表是從其他進程生成的,並且您在該列表中丟失了一些數據,那么這很有意義。

> x <- 1:10
> x[ c(1, 2, NA, 3, 4, NA, 5, 6) ]
[1]  1  2 NA  3  4 NA  5  6

一個奇怪的行為是,如果您嘗試單獨使用 NA 進行索引,則會得到一個充滿 NA 的數組。 例如檢查一下:

> Robin <- 1:8
> cat( Robin[NA], 'Batman', sep="\n" )
NA
NA
NA
NA
NA
NA
NA
NA
Batman

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM