Для полноты, есть более простая однострочная, чтобы сделать это в «применимом» стиле в соответствии с запросом:
as.list(sapply(x[-1],function(y) as.double(x[1])))
Хотя это не самый быстрый вариант, он, безусловно, достаточно аккуратен, чтобы заслужить его место какответ на вопрос.Значительное ускорение возможно без ненужного упрощения вектора:
library(microbenchmark)
microbenchmark(times=20,
Charles=as.list(setNames(rep(as.numeric(x[1]), length(x) - 1), x[-1])),
Gavin=makeList(x),
Anon=sapply(x[-1],function(y) as.double(x[1]),simplify=FALSE)
)
Unit: microseconds
expr min lq median uq max neval
Charles 10.868 11.7735 11.774 12.3775 55.848 20
Gavin 12.075 12.6795 13.132 13.8870 26.867 20
Anon 6.643 7.0950 7.548 8.1520 17.811 20