10

这里list1只有两个元素——“ name”和“ age”,每个元素都有两个值,现在我想在每个元素中添加新值,

list1<-list(name=c("bob","john"),age=c(15,17))
list1
$name
[1] "bob"  "john"

$age
[1] 15 17
list1[[1]][3]<-"herry"
list1[[2]][3]<-17
list1
$name
[1] "bob"   "john"  "herry"

$age
[1] 15 17 17

有更简单的方法吗?

4

3 回答 3

7

此解决方案适用于任何长度的列表:

values <- list("herry", 17) # a list of the new values
list1 <- mapply(append, list1, values, SIMPLIFY = FALSE)


# $name
# [1] "bob"   "john"  "herry"

# $age
# [1] 15 17 17
于 2012-11-07T07:55:16.530 回答
0

rlist 库提供了@Sven Hohenstein 给出的解决方案的替代方案。它不是更好,而是更直观地阅读。如果密钥相同,那么编程恕我直言会容易一些。

library(rlist) list1 <- list.append(list1, key=value)

请注意,密钥是不带引号的。因此,在您的示例中,它将是:

library(rlist) list1 <- list.append(list1, henry=17)

于 2018-11-22T08:30:30.050 回答
-1

这有点取决于你想做什么。如果要为列表中的每个元素添加不同的值,我认为最简单的方法是:

Vec <- c("herry",17,...)
i=0 
list1 <- lapply(list1, function(x) {i=i+1 ; append(x,Vec[i])})

如果列表中的每个向量都具有相同的长度,那么您也可以使用一些快捷方式。如果要将相同的值添加到列表中的每个元素:

list1 <- lapply(list1, function(x) append(x, "NewEl"))
于 2012-11-07T06:22:21.280 回答