[英]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.4節indexing的介紹部分,其第一小節是您提到的段落( 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.