将对象分配给r中的动态列表

时间:2016-03-18 08:15:01

标签: r

我有一个嵌套循环,它产生我想要存储在具有动态名称的列表对象中的输出。这个玩具的例子如下:

set.seed(8020)
names<-sample(LETTERS,5,replace = F)

for(n in names)
{
  #Create the list
  assign(paste0("examples_",n),list())

  #Poulate the list
  get(paste0("examples_",n))[[1]]<-sample(100,10)
  get(paste0("examples_",n))[[2]]<-sample(100,10)
  get(paste0("examples_",n))[[3]]<-sample(100,10)
}

不幸的是我一直收到错误:

  Error in get(paste0("examples_", n))[[1]] <- sample(100, 10) : 
  target of assignment expands to non-language object

我尝试了各种assignevalget类型的函数来解析对象,但没有运气

1 个答案:

答案 0 :(得分:1)

使用一个有效的例子扩展我的评论:

 examples <- vector(mode="list", length=length(names) )
 names(examples) <- names  # please change that to mynames 
                           # or almost anything other than `names`
 examples <- lapply( examples, function(L) {L[[1]] <- sample(100,10)
                         L[[2]] <- sample(100,10)
                         L[[3]] <- sample(100,10); L}  )
# Top of the output:
> examples
$P
$P[[1]]
 [1] 34 49  6 55 19 28 72 42 14 92

$P[[2]]
 [1] 97 71 63 59 66 50 27 45 76 58

$P[[3]]
 [1] 94 39 77 44 73 15 51 78 97 53


$F
$F[[1]]
 [1] 12 21 89 26 16 93  4 13 62 45

$F[[2]]
 [1] 83 21 68 74 32 86 52 49 16 13

$F[[3]]
 [1] 14 45 40 46 64 85 88 28 53 42

这种编程模式随着时间的推移变得更加自然。它让你无法一直编写笨重的for循环。一次为单个列表节点开发算法,然后使用sapplylapply迭代处理。