Может быть, было бы проще с Map
. Мы передаем интересующее число в нужном нам порядке и делаем простое умножение
Map(`*`, lst1, c(1, -1, 0))
Если числа названы
num1 <- setNames(c(1, -1, 0), c("first", "third", "second"))
, то сопоставим с names
из list
Map(`*`, lst1, num1[names(lst1)])
#$first
# a b
#1 1 2
#2 2 3
#3 3 4
#$second
# a b
#1 0 0
#2 0 0
#3 0 0
#$third
# a b
#1 -3 -6
#2 -6 -9
#3 -9 -12
Или, если мы решим go с lapply
, l oop над names
из list
, извлечь элемент list
на основе имя, а также соответствующий элемент vector
(named
vector)
lapply(names(lst1), function(nm) lst1[[nm]] * num1[nm])
Или с sapply
sapply(names(lst1), function(nm) lst1[[nm]] * num1[nm], simplify = FALSE)
Или другой параметр map2
от purrr
library(purrr)
map2(lst1, num1[names(lst1)], `*`)
Примечание: c
- это имя функции, и не рекомендуется создавать имена объектов с именами функций
data
lst1 <- list(first = structure(list(a = 1:3, b = 2:4), class = "data.frame",
row.names = c("1",
"2", "3")), second = structure(list(a = c(2L, 4L, 6L), b = c(4L,
6L, 8L)), class = "data.frame", row.names = c("1", "2", "3")),
third = structure(list(a = c(3L, 6L, 9L), b = c(6L, 9L, 12L
)), class = "data.frame", row.names = c("1", "2", "3")))