【发布时间】:2010-12-16 23:11:20
【问题描述】:
有人可以推荐一个可以让我计算并返回列表中项目数的函数吗?
library(stringr)
l <- strsplit(words, "a")
if(# number of items in list l < 1)
next
【问题讨论】:
-
set.seed(123) l
有人可以推荐一个可以让我计算并返回列表中项目数的函数吗?
library(stringr)
l <- strsplit(words, "a")
if(# number of items in list l < 1)
next
【问题讨论】:
获取或设置向量(包括列表)和因子的长度,以及已为其定义方法的任何其他 R 对象的长度。
将列表或原子向量 (is.atomic) 的每个元素的长度作为整数或数值向量获取。
【讨论】:
对R 像我这样的新人的建议:请注意,以下是单个对象的列表:
> mylist <- list (1:10)
> length (mylist)
[1] 1
在这种情况下,您不是在寻找列表的长度,而是在寻找它的第一个元素:
> length (mylist[[1]])
[1] 10
这是一个“真实”的列表:
> mylist <- list(1:10, rnorm(25), letters[1:3])
> length (mylist)
[1] 3
另外,R 似乎将 data.frame 视为列表:
> df <- data.frame (matrix(0, ncol = 30, nrow = 2))
> typeof (df)
[1] "list"
在这种情况下,您可能对ncol() 和nrow() 感兴趣,而不是length():
> ncol (df)
[1] 30
> nrow (df)
[1] 2
虽然length() 也可以工作(但当您的 data.frame 只有一列时,这是一个技巧):
> length (df)
[1] 30
> length (df[[1]])
[1] 2
【讨论】:
我花了很长时间试图弄清楚这一点,但这很简单!您可以使用length(·)。 length(mylist) 会告诉你 mylist 包含的对象数量。
...刚刚意识到有人已经回答了这个问题-对不起!
【讨论】:
让我们创建一个空列表(不是必需的,但很高兴知道):
> mylist <- vector(mode="list")
让我们在里面放一些东西 - 3 个组件/索引/标签(无论你想怎么称呼它),每个都有不同数量的元素:
> mylist <- list(record1=c(1:10),record2=c(1:5),record3=c(1:2))
如果您只对列表中的组件数量感兴趣,请使用:
> length(mylist)
[1] 3
如果您对列表的特定组件中元素的长度感兴趣,请使用:(此处均引用相同的组件)
length(mylist[[1]])
[1] 10
length(mylist[["record1"]]
[1] 10
如果您对列表所有组件中所有元素的长度感兴趣,请使用:
> sum(sapply(mylist,length))
[1] 17
【讨论】:
您也可以使用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
unlist() 也是一种在列表上执行其他函数的简单方法,例如:
> sum(mylist)
Error in sum(mylist) : invalid 'type' (list) of argument
> sum(unlist(mylist))
[1] 45
【讨论】: