我有一个向量列表
[[1]][1] 1 1 2
[[2]]
[1] 1 1 2
[[3]]
[1] 2 1 1
[[4]]
[1] 2 2 2
我想用9
替换每个向量的第一部分。我尝试过
out <- append(vecs2T2[[1]], y, after=0)
,但这只是在开始处添加一个9
,而不是替换它(请参见下文)。
[1] 9 1 1 2
我希望该条目阅读912
。
答案 0 :(得分:1)
lapply(ll, replace, 1, 9)
这一步一步地进行,并且replace
将第一个项加9。(替换的参数是:(数据,索引列表,值列表),值列表被回收到与索引列表一样长。)
replace()
仅定义为:
replace <- function (x, list, values) {
x[list] <- values
x
}
因此您也可以使用该方法。
lapply(ll, function(x) { x[1] <- 9 ; x })
您也可以与purrr::map()
一起使用:
purrr::map(ll, ~{ .x[1] <- 9 ; .x })
purrr::map(ll, replace, 1, 9)
一对一(不是世界上最好的微基准设置):
microbenchmark::microbenchmark(
purr_repl = purrr::map(ll, replace, 1, 9),
purr_op = purrr::map(ll, ~{ .x[1] <- 9 ; .x }),
lapp_repl = lapply(ll, replace, 1, 9),
lapp_op = lapply(ll, function(x) { x[1] <- 9 ; x }),
Map = Map(function(x, y)c(x, y[-1]), 9, ll)
)
## Unit: microseconds
## expr min lq mean median uq max neval
## purr_repl 27.510 29.7555 49.98242 31.4735 33.4805 1506.400 100
## purr_op 84.415 86.9550 125.07364 90.0665 98.9465 2423.406 100
## lapp_repl 4.422 4.8350 5.94472 5.1965 5.5930 34.947 100
## lapp_op 4.672 5.4250 19.14590 5.9045 6.5015 1215.477 100
## Map 10.670 12.2490 28.94712 13.5935 14.7170 1238.311 100
答案 1 :(得分:0)
另一个想法是使用Map
并将9
与每个向量减去其第一个元素相连
Map(function(x, y)c(x, y[-1]), 9, l1)