簡體   English   中英

R 語言定義:使用美元符號索引命名向量

[英]R Language Definition: indexing a named vector using dollar sign

可以通過以下方式使用字符來索引命名向量:

v <- c(a=9, b=8, c=7)
v[["a"]]  # Returns: 9

我正在閱讀R Language Definition , § 3.4.1 Indexing by vectors ,這似乎是說美元符號 ( $ ) 可用於訪問命名向量的內容:

R 允許使用向量作為索引的一些強大的構造。 我們將首先討論簡單向量的索引。 為簡單起見,假設表達式為x[i] 那么根據i的類型存在以下可能性。

[...]

  • 特點。 i中的字符串與x的名稱屬性匹配,並使用結果整數。 如果完全匹配失敗,則使用[[$部分匹配,因此如果x不包含名為"aa"的組件並且"aabb"是唯一具有前綴"aa"名稱,則x$aa將匹配x$aabb [...]

所以我嘗試通過以下方式使用$

v <- c(a=9, b=8, c=7)
v$a

但是,我收到一個錯誤:

Error in v$a : $ operator is invalid for atomic vectors

這是什么意思? 我一定是誤解了上面R 語言定義的摘錄。

在第3.4indexing的介紹部分,其第一小節是您提到的段落( 3.4.1 Indexing by vectors ),指定:

使用 $ 的形式適用於遞歸對象,例如列表和配對列表。 它只允許一個文字字符串或一個符號作為索引。

將 $ 應用於非遞歸對象是一個錯誤。”

在您的示例中,您正在使用 $ 索引非遞歸對象。 並且因為被索引的向量不是遞歸的,所以你得到了一個錯誤。

您可以使用函數is.recursive測試對象是否是遞歸的。 請注意,環境對象也是遞歸的。

v <- c(a=9, b=8, c=7)
x <- list(a=8, b=3)
y <- pairlist(a=5)
e <- as.environment(x)

is.recursive(v)
# [1] FALSE
is.recursive(x)
# [1] TRUE
is.recursive(y)
# [1] TRUE
is.recursive(e)
# [1] TRUE

暫無
暫無

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

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