Вот один способ сделать это, все в одной анонимной функции:
z = lapply(lst, function(x) {
result = x$letters
names(result) = x$numbers
return(result)
})
str(z)
# List of 3
# $ name1: Named chr [1:2] "a" "b"
# ..- attr(*, "names")= chr [1:2] "1" "2"
# $ name2: Named chr [1:2] "a" "b"
# ..- attr(*, "names")= chr [1:2] "1" "2"
# $ name3: Named chr [1:2] "a" "b"
# ..- attr(*, "names")= chr [1:2] "1" "2"
Ваш подход застрял, потому что после того, как вы извлекли все letters
, вам нужно перебрать оба letters
и numbers
для установки имен, но lapply
позволяет перебирать только одну вещь.(И присвоение внутри lapply
не работает должным образом, единственное, что имеет значение, это возвращаемый объект.)
Если вы не можете использовать подход, описанный выше, выполнение действий водин проход через lst
, вместо этого вы можете использовать Map
, который перебирает несколько списков.Мы будем использовать функцию setNames
вместо names<-()
, которая вызывается при попытке сделать names(x) <-
.
Map(
f = setNames,
object = lapply(lst, "[[", "letters"),
nm = lapply(lst, "[[", "numbers")
)
# $`name1`
# 1 2
# "a" "b"
#
# $name2
# 1 2
# "a" "b"
#
# $name3
# 1 2
# "a" "b"