Добавить именованный вектор в список - PullRequest
19 голосов
/ 27 января 2012

Это ужасно просто, но я не могу понять это

Предположим, у меня есть список переменных:

lst <- list(a=1:4, b=rep('k', 5), c=3)

Если я хочу добавить к этому векторс указанным именем, я должен быть в состоянии сделать это с помощью:

c(f=1:5, lst)

Но вместо создания записи с именем 'f', содержащей 1 2 3 4 5, он создает пять записей (f1 - f5), содержащих одну изчисла каждый.

Как мне подавить это поведение?

Я знаю, что могу использовать

lst$f <- 1:5

, но я хотел бы добавить список в вызов функции...

Ответы [ 4 ]

22 голосов
/ 27 января 2012

Превратить f в список из одного, а затем объединить его:

c(list(f=1:5), lst)

12 голосов
/ 19 октября 2012

вот простая функция для добавления одного (или более) элемента в список:

lappend <- function (lst, ...){
lst <- c(lst, list(...))
  return(lst)
}

> a <- list()
> a
list()

> lappend(a,c(1,2,3))
[[1]]
[1] 1 2 3

> lappend(a, c(4,5,6), c(7,8,9))
[[1]]
[1] 4 5 6

[[2]]
[1] 7 8 9

Надеюсь, это поможет !!Bye.

10 голосов
/ 27 июля 2012

Вы можете просто сделать:

lst[[key]] <- any_object

(обратите внимание на двойные квадратные скобки [[]])

any_object, конечно, может быть вектором.

Этот метод имеет преимущество в том, что его можно использовать, даже если точное значение key хранится в переменной, и вы не знаете его заранее, или если эта переменная повторяется в цикле for, например:

count <- list()
for (k in c("boys","girls","other")) {
  count[[k]] <- sum(data == k)
}
7 голосов
/ 28 января 2012

Более универсальное решение с добавлением:

append(lst, list(f=1:5), after=0)# after - position to append
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...