Я пытаюсь найти или написать функцию, связанную с Map() в R, которая генерирует вложенный список результатов при применении функции.Рекурсивная карта в R
Функция R Map() работает следующим образом:
Map(f, v, w, x)
=> list(
f(v1, w1, x1),
f(v2, w2, x2), ...)
Я хотел бы Сопоставьте функции над каждой комбинации аргументов в V, W, X, и т.д., и возвращает список - верхний уровень из списка, соответствующей записи в V, каждый из этих записей должна быть список и содержать записи для каждого уровня ж, и на ...
в коде, я бы хотел
Map_recursive(f, v) == Map(f, v) == lapply(v, f)
#
# Map_recursive(c, c(a1=1, a2=2))
# => List(a1 = 1, a2 = 2)
Map_recursive(f, v, w)
== Map(function(vi) {
Map(f, vi, w)
}, v)
== lapply(v, function(vi){
lapply(w, function(wi) f(vi, wi))
})
#
# Map_recursive(c, c(a1 = 1, a2 = 2), c(b1=10, b2 = 20, b3 = 30))
# => List(
# a1 = List(b1 = (1, 10), b2 = (1, 20), b3 = (1, 30)),
# a2 = List(b1 = (2, 10), b2 = (2, 20), b3 = (2, 30))
# )
Map_recursive(f, v, w, x) == Map(function(vi){
Map(function(wj){
Map(f, vi, wj, x)
}, w)},
v
)
# ... all the way down
Важно отметить, что un как и в Map, итерационные входы не должны иметь одинаковую длину (т. е. v, w, x могут иметь разную длину), и должно быть возможно различное количество итерируемых входов.
Я искал через такие вещи, как R :: purrr и R :: функциональны, но я не мог найти функцию высшего порядка, который делает то, что мне нужно
R
Почему вы хотите это сделать рекурсивно, и как это отличается от функций семейство «apply», которое является версией (-ами) R «карты»? –
Единственный способ, с помощью которого я мог бы использовать это семейство функций, чтобы делать то, что я хотел, - это встраивать вызовы друг в друга, что довольно уродливо и должно быть жестко закодировано для работы с разными номерами итераций. –
. Ваш вопрос isn 'совершенно ясно, но это начинает иметь смысл. Предполагается ли, что 'f' должен применяться к атомным типам и' v', 'w' и т. Д. Вложенным спискам с одинаковой степенью вложенности (например, представляющие деревья), а затем вы ищете функцию карты, которая будет принимать коллекцию например параллельные деревья и вернуть дерево той же структуры, полученное путем применения 'f' к листьям? –