使用分配动态更改循环中的列表名称?

发布于 2024-11-16 01:16:16 字数 297 浏览 2 评论 0原文

最好举个例子:在我看来,这段代码应该生成 10 个列表,每个列表包含 100 个元素。

for (i in 1:10){
assign(paste("List", i, sep="."), vector("list", length=100))
  for (j in 1:100){
    assign(paste("List", i, sep=".")[[j]], j+1)
  }
}

但事实并非如此..第一个分配工作正常,创建一个包含 100 个元素的空列表,但如何在其中填充元素 [[j]] ?谢谢!

Best give an example: this code should, the way I see it, produce 10 lists with 100 elements each.

for (i in 1:10){
assign(paste("List", i, sep="."), vector("list", length=100))
  for (j in 1:100){
    assign(paste("List", i, sep=".")[[j]], j+1)
  }
}

But it doesn't.. The first assign works fine, creates an empty list with 100 elements, but how can I fill element [[j]] in it? Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

太阳哥哥 2024-11-23 01:16:16

与在全局环境中创建 10 个列表不同,只创建一个列表列表会简单得多:

mybiglist <- list()
for(i in 1:10) {
  mybiglist[[i]] <- list()
  for( j in 1:100 ) {
    mybiglist[[i]][[j]] <- j+1
  }
}

您可以将名称添加到任何列表中,或者仅通过数字下标访问各个部分。这也不会污染您的全局环境,并且通常更容易调试。当您想对 10 个列表执行某些操作时,您只需使用 lapply/sapply 即可,而无需再进行另一个循环。您还可以保存/加载/删除/探索/等。一个对象而不是 10 个。

Instead of making 10 lists in the global environment, it would be much simpler to just make a list of lists:

mybiglist <- list()
for(i in 1:10) {
  mybiglist[[i]] <- list()
  for( j in 1:100 ) {
    mybiglist[[i]][[j]] <- j+1
  }
}

You can add names to any of the lists, or just access the parts by numeric subscripts. this also does not polute your global environment and is usually easier to debug. And when you want to do something with the 10 lists you can just use lapply/sapply instead of needing to fight another loop. You can also save/load/delete/explore/etc. one single object instead of 10.

你怎么这么可爱啊 2024-11-23 01:16:16

问题是你不能使用 assign 为对象的元素赋值,除非你变得有点棘手。见下文。

for (i in 1:10){
  assign(paste("List", i, sep="."), vector("list", length=100))
  for (j in 1:100){
    assign(paste("List", i, sep="."), 
      {x <- get(paste("List", i, sep=".")) 
       x[[j]] <- j + 1 
       x})
  }
}

rm(i, j, x)

Problem is you can't use assign to assign values to elements of objects unless you get a bit tricky. See below.

for (i in 1:10){
  assign(paste("List", i, sep="."), vector("list", length=100))
  for (j in 1:100){
    assign(paste("List", i, sep="."), 
      {x <- get(paste("List", i, sep=".")) 
       x[[j]] <- j + 1 
       x})
  }
}

rm(i, j, x)
李白 2024-11-23 01:16:16

下面的代码生成 10 个列表,每个列表包含 100 个元素。

myList = list()

for (i in 1:10) {
      myList[[i]] = 1:100
}

但是,不确定您是否需要 10 个向量列表10 个列表列表

如果您想要后者,您可以执行以下操作:

myList = list()

for (i in 1:10) {
  myList[[i]] = list()

  for (j in 1:100) {
      myList[[i]][[j]] = j
  }  
}

Below code produces 10 lists with 100 elements each.

myList = list()

for (i in 1:10) {
      myList[[i]] = 1:100
}

However, not sure if you want 10 lists of vectors OR 10 lists of lists

In case you would like the latter, you can do something like:

myList = list()

for (i in 1:10) {
  myList[[i]] = list()

  for (j in 1:100) {
      myList[[i]][[j]] = j
  }  
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文