计算列表中的对象数

Kar*_*arl 94 r list count

有人知道R函数会返回列表中的项目数吗?

Joe*_*oey 158

length(x)

  • `lengths(x)`(注意复数)将返回列表中每个元素的长度. (37认同)
  • @AleRuete:您应该将其添加为答案!这非常有用! (5认同)
  • 谢谢@SeanStayn,但问题已经结束. (4认同)

Ski*_*rou 76

R像我这样的新手的建议:注意,以下是单个对象的列表 :

> mylist <- list (1:10)
> length (mylist)
[1] 1
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您不是要查找列表的长度,而是查找其第一个元素:

> length (mylist[[1]])
[1] 10
Run Code Online (Sandbox Code Playgroud)

这是一个"真实"的清单:

> mylist <- list(1:10, rnorm(25), letters[1:3])
> length (mylist)
[1] 3
Run Code Online (Sandbox Code Playgroud)

此外,似乎将Rdata.frame视为列表:

> df <- data.frame (matrix(0, ncol = 30, nrow = 2))
> typeof (df)
[1] "list"
Run Code Online (Sandbox Code Playgroud)

在这种情况下,你可能感兴趣的ncol()nrow(),而不是length() :

> ncol (df)
[1] 30
> nrow (df)
[1] 2
Run Code Online (Sandbox Code Playgroud)

虽然length()也可以工作(但是当你的data.frame只有一列时这是一个技巧):

> length (df)
[1] 30
> length (df[[1]])
[1] 2
Run Code Online (Sandbox Code Playgroud)


小智 11

我花了很多年时间试图解决这个问题,但这很简单!你可以用length(·). length(mylist)会告诉你mylist包含的对象数量.

......刚认识到有人已经回答了这个问题 - 对不起!


小智 9

让我们创建一个空列表(不是必需的,但很高兴知道):

> mylist <- vector(mode="list")
Run Code Online (Sandbox Code Playgroud)

让我们在其中添加一些东西 - 3个组件/索引/标签(无论你想要什么),每个都有不同数量的元素:

> mylist <- list(record1=c(1:10),record2=c(1:5),record3=c(1:2))
Run Code Online (Sandbox Code Playgroud)

如果您只对列表中的组件数感兴趣,请使用:

> length(mylist)
[1] 3
Run Code Online (Sandbox Code Playgroud)

如果您对列表的特定组件中的元素长度感兴趣,请使用:(两者都引用相同的组件)

length(mylist[[1]])
[1] 10
length(mylist[["record1"]]
[1] 10
Run Code Online (Sandbox Code Playgroud)

如果您对列表的所有组件中的所有元素的长度感兴趣,请使用:

> sum(sapply(mylist,length))
[1] 17
Run Code Online (Sandbox Code Playgroud)


小智 6

您也可以使用unlist(),这通常对处理列表很有用:

> mylist <- list(A = c(1:3), B = c(4:6), C = c(7:9))

> mylist
$A
[1] 1 2 3

$B
[1] 4 5 6

$C
[1] 7 8 9

> unlist(mylist)
A1 A2 A3 B1 B2 B3 C1 C2 C3 
 1  2  3  4  5  6  7  8  9 

> length(unlist(mylist))
[1] 9
Run Code Online (Sandbox Code Playgroud)

unlist()也是在列表上执行其他函数的简单方法,例如:

> sum(mylist)
Error in sum(mylist) : invalid 'type' (list) of argument

> sum(unlist(mylist))
[1] 45
Run Code Online (Sandbox Code Playgroud)