Функция R, которая вернет количество элементов в списке?
Ответы:
Совет для 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
Создадим пустой список (не обязательно, но полезно знать):
> 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