更好的做R /替换以下for循环的R方式

时间:2016-08-10 14:40:00

标签: r

出于教育原因,是否有更好的方法(适用于?而不是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

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}}