使用分配动态更改循环中的列表名称?
最好举个例子:在我看来,这段代码应该生成 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
与在全局环境中创建 10 个列表不同,只创建一个列表列表会简单得多:
您可以将名称添加到任何列表中,或者仅通过数字下标访问各个部分。这也不会污染您的全局环境,并且通常更容易调试。当您想对 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:
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.
问题是你不能使用
assign
为对象的元素赋值,除非你变得有点棘手。见下文。Problem is you can't use
assign
to assign values to elements of objects unless you get a bit tricky. See below.下面的代码生成 10 个列表,每个列表包含 100 个元素。
但是,不确定您是否需要 10 个向量列表 或 10 个列表列表
如果您想要后者,您可以执行以下操作:
Below code produces 10 lists with 100 elements each.
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: