2015-09-28 39 views
3

我想在R中創建一個列表並訪問它的單元格。我是R新手,並且有Matlab背景。這些[],[[]]真的讓我煩惱。 我嘗試閱讀幫助和在線,但我仍然不明白。在下面的代碼c["var1"][1]返回不同於c$"var"[1]正確的方法來訪問R中的列表元素

這三個符號的實際用途是什麼[][[]]$

v <- vector("character", 5) 
v[1] <- 'a' 
v[2] <- 'a' 
v[4] <- 'a' 
v 
# [1] "a" "a" "" "a" "" 
c <- list(v, v) 
names(c) <- c("var1", "var2") 
c 
# $var1 
# [1] "a" "a" "" "a" "" 

# $var2 
# [1] "a" "a" "" "a" "" 

c["var1"][1] 
# $var1 
# [1] "a" "a" "" "a" "" 

c$"var1"[1] 
# [1] "a" 
+3

你需要'C [[ 'VAR1'] [1]'的'['仍然是一個'list' – akrun

+1

使用'str'來查看對象的結構。例如參見'str(c [1])'與str(c [[1]])相反。使用'$'時不需要引號:'c $ var1'工作得很好。 – nicola

+2

你能否確認你已經閱讀過「help(」[「)'和[Introduction to R]的第6.1節(https://cran.r-project.org/doc/manuals/R-intro.pdf)? – Roland

回答

4

所有這些方法得到不同的輸出

[]返回一個列表

[[]]返回其被存儲在列表

的對象。如果它是一個命名列表,然後

List $ name或List [[「name」]]將返回與List [[]]相同的值

雖然名單[ 「名稱」]返回一個列表,看看下面的例子

> List <- list(A = 1,B = 2,C = 3,D = 4) 
> List[1] 
$A 
[1] 1 

> class(List[1]) 
[1] "list" 
> List[[1]] 
[1] 1 
> class(List[[1]]) 
[1] "numeric" 
> List$A 
[1] 1 
> class(List$A) 
[1] "numeric" 
> List["A"] 
$A 
[1] 1 

> class(List["A"]) 
[1] "list" 
> List[["A"]] 
[1] 1 
> class(List[["A"]]) 
[1] "numeric"