Как я могу подсчитать элементы в рекурсивном списке? Вот данные, но это может быть больший список.Количество элементов в рекурсивном списке
data <- list(list(list("a"), list("b"), list("c","d","e")), list("f"))
> str(data)
List of 2
$ :List of 3
..$ :List of 1
.. ..$ : chr "a"
..$ :List of 1
.. ..$ : chr "b"
..$ :List of 3
.. ..$ : chr "c"
.. ..$ : chr "d"
.. ..$ : chr "e"
$ :List of 1
..$ : chr "f"
На выходе я хочу иметь вектор с использованием%, который суммирует до 100%:
o <- c(1/2/3/1, 1/2/3/1, 1/2/3/3, 1/2/3/3, 1/2/3/3, 1/2/1)
[1] 0.16666667 0.16666667 0.05555556 0.05555556 0.05555556 0.50000000
sum(o)
[1] 1
Так что мне нужно v1 (только респ распределения = 100%):
v1 <- rep(1, length(unlist(data)))
v1
[1] 1 1 1 1 1 1
v2:
> v2 <- rep(length(data), length(unlist(data)))
> v2
[1] 2 2 2 2 2 2
v3,
> v3 = c(3, 3, 3, 3, 3, 1)
v4:
v4 = с (1, 1, 3, 3, 3, 1)
т.д.
В результате:
> v1/v2/v3/v4
[1] 0.16666667 0.16666667 0.05555556 0.05555556 0.05555556 0.50000000
sum(v1/v2/v3/v4)
[1] 1
Итак, вопрос в том, как я могу сделать v3 и v4 и т. Д.?
Может быть, есть способ получить вектор ул (данные) подсчет длины каждого ребенка, как:
out <- c("2/3/1", "2/3/1", "2/3/3", "2/3/3", "2/3/3", "2/1")
Затем этим вектором я могу сделать математику:
> sapply(out, function(x) last(cumprod(1/c(1, as.numeric(unlist(strsplit(x, "/")))))))
2/3/1 2/3/1 2/3/3 2/3/3 2/3/3 2/1
0.16666667 0.16666667 0.05555556 0.05555556 0.05555556 0.50000000