2015-09-28 41 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"