Как создать вектор списков в R?
У меня есть список (tmpList), который выглядит следующим образом:
$op
[1] "empty"
$termset
$termset$field
[1] "entry"
$termset[[2]]
$termset[[2]]$explode
[1] "Y"
Это список со списком внутри.
Если я добавлю этот список в вектор
theOneVector = c(theOneVector, tmpList)
Теперь результирующий вектор имеет длину 2, потому что первая запись ( "op" ) списка отделена от tmpList.
Можно ли добавить полный tmpList в этот вектор?
Я уже пробовал его с помощью
theOneVector = c(theOneVector, list(tmpList))
который дает вектор с длиной 1, но очень громоздко получить доступ к элементам списка с помощью этого дополнительного списка вокруг списка. (Слишком много списка в одном предложении, я думаю.)
Любая помощь будет оценена,
Мартин
Ответы
Ответ 1
Вы можете привязать вектор (ограниченную структуру, в которой все компоненты должны быть одного типа) в список (неограниченный).
Но вы не можете сделать обратное. Используйте списки списков списков... и затем используйте lapply и др. Для извлечения.
Ответ 2
выражение 'c (theOneVector, list (tmpList)) фактически не вернуло вектор длины 1, оно вернуло список (путем преобразования), поскольку элементы в векторе должны быть одного режима (данные тип).
Здесь вы можете создать контейнер в R, который будет содержать элементы разного режима и чьи элементы легко доступны:
# create the container (an R 'list')
vx = vector(mode="list")
# create some items having different modes to put in it
item1 = 1:5
item2 = "another item"
item3 = 34
item4 = list(a = c(1:5), b = c(10:15))
# now fill the container
vx$item1 = item1
vx$item2 = item2
vx$item3 = item3
vx$item4 = item4
# access the items in the container by name:
vx$item1
# returns: [1] 4 5 6
vx$item2
# returns: [1] "another item"
Ответ 3
Я думаю, что list()
list()
- это то, что вы хотите.
Вот простой пример с lapply()
, который показывает, как их использовать. Обратите внимание, что lapply()
будет применять функцию, предоставляемую каждому элементу списка, указанному в аргументе, и возвращает список, содержащий результаты отдельных исполнений.
> l1 = list(a = 10, b = 11)
> l2 = list(a = 20, b = 22)
> test_function <- function(l){
return(paste("a =", l$a, "b = ", l$b, "\n"))
}
# Do something to each element of the list
# (i.e.: apply a function test_function() using lapply()).
# This will return a list over which you can iterate.
# Each individual list l1 and l2 is "wrapped" into a single list: list(l1, l2)
> res = lapply(X = list(l1, l2), FUN = test_function)
> res
[[1]]
[1] "a = 10 b = 11 \n"
[[2]]
[1] "a = 20 b = 22 \n"
# First element of the results
> res[1]
[1] "a = 10 b = 11 \n"
# Second element of the results
> res[2]
[1] "a = 20 b = 22 \n"