出于教育原因,是否有更好的方法(适用于?而不是for循环)以下内容?一直在打破我的脑袋但看不到“解决方案”。
foo_length <- 10
foo_list <- list("1"=c(1, 3, 4), "2"=c(2, 5, 9), "3"=c(6, 7, 8, 10))
foo <- rep(NA_integer_, foo_length)
for (iname in names(foo_list))
foo[foo_list[[iname]]] <- as.integer(iname)
foo
的输出为1 2 1 1 2 3 3 3 2 3
答案 0 :(得分:4)
另一种选择:
with(stack(foo_list), as.integer(as.character(ind))[order(values)] )
# 1 2 1 1 2 3 3 3 2 3
要了解它的工作原理,请查看各个步骤......
s = stack(foo_list)
s[order(s$values),]
s$ind[order(s$values)]
并阅读?with
,?stack
,?factor
和?order
。
答案 1 :(得分:3)
怎么样
lens <- sapply(foo_list,length) ## lengths of components
foo <- numeric(foo_length) ## result vector (empty)
v <- rep(as.integer(names(foo_list)),lens) ## matching vector
foo[unlist(foo_list)] <- v ## assign matching values
答案 2 :(得分:0)
这有用吗?
{{1}}