如何计算递归列表中的元素? 这是数据,但它可能是更大的列表。
.js
在输出时我想要使用%使用率的向量,总和为100%:
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"
所以我需要v1(只是分配的代表= 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
V2:
v1 <- rep(1, length( unlist(data) ))
v1
[1] 1 1 1 1 1 1
v3,
> v2 <- rep(length(data), length( unlist(data) ))
> v2
[1] 2 2 2 2 2 2
V4:
v4 = c(1,1,3,3,3,1)
等
结果:
> v3 = c(3, 3, 3, 3, 3, 1)
所以问题是如何制作v3和v4等?
也许有办法获得每个孩子的str(数据)计数长度的向量,如:
> v1/v2/v3/v4
[1] 0.16666667 0.16666667 0.05555556 0.05555556 0.05555556 0.50000000
sum(v1/v2/v3/v4)
[1] 1
然后用这个向量我可以做数学:
out <- c("2/3/1", "2/3/1", "2/3/3", "2/3/3", "2/3/3", "2/1")
答案 0 :(得分:3)
这适用于递归解决方案,可能类似于:
data <- list(list(list("a"), list("b"), list("c","d","e")), list("f"))
f <- function(x, prop=1)
{
if(is.list(x)) lapply(x, f, prop=prop/length(x))
else prop/length(x)
}
unlist(f(data))
#[1] 0.16666667 0.16666667 0.05555556 0.05555556 0.05555556 0.50000000