重新分配列表中的值而不循环

时间:2015-01-06 13:32:59

标签: r

test <- list(a = list("first"= 1, "second" = 2), 
         b = list("first" = 3, "second" = 4))

在上面的列表中,我想将“第一”元素重新分配给相等的,比方说,五。这个for循环有效:

for(temp in c("a", "b")) {
  test[[temp]]$first <- 5
}

有没有办法使用矢量化操作(lapply等)来做同样的事情?以下提取值,但我无法重新分配它们:

lapply(test, "[[", "first")

2 个答案:

答案 0 :(得分:4)

以下是使用unlistrelist

的矢量化单线程
relist((function(x) ifelse(grepl("first",names(x)),5,x))(unlist(test)),test)
$a
$a$first
[1] 5

$a$second
[1] 2


$b
$b$first
[1] 5

$b$second
[1] 4

答案 1 :(得分:3)

你可以这样做:

test <- lapply(test, function(x) {x$first <- 5; x})