【发布时间】:2018-12-27 18:51:01
【问题描述】:
我想在 for 循环中创建两个数据框列表,但我不能使用 assign:
dat <- data.frame(name = c(rep("a", 10), rep("b", 13)),
x = c(1,3,4,4,5,3,7,6,5,7,8,6,4,3,9,1,2,3,5,4,6,3,1),
y = c(1.1,3.2,4.3,4.1,5.5,3.7,7.2,6.2,5.9,7.3,8.6,6.3,4.2,3.6,9.7,1.1,2.3,3.2,5.7,4.8,6.5,3.3,1.2))
a <- dat[dat$name == "a",]
b <- dat[dat$name == "b",]
samp <- vector(mode = "list", length = 100)
h <- list(a,b)
hname <- c("a", "b")
for (j in 1:length(h)) {
for (i in 1:100) {
samp[[i]] <- sample(1:nrow(h[[j]]), nrow(h[[j]])*0.5)
assign(paste("samp", hname[j], sep="_"), samp[[i]])
}
}
我得到包含第 100 个样本结果的向量,而不是名为 samp_a 和 samp_b 的列表。我想得到一个列表samp_a 和samp_b,其中包含dat[dat$name == a,] 和dat[dat$name == a,] 的所有不同样本。
我该怎么做?
【问题讨论】:
-
为什么要这样做?保持工作空间结构化几乎(可能总是)会更好,创建 100 个编号的对象是没有意义的。
-
因为我需要 100 个随机抽取的样本来测试它们的某些功能。这个循环在一个函数内,所以我的工作空间将是结构化的,我猜......
-
你的
samp列表中有它们,为什么需要将它们分配给工作区中的不同对象?无论您想将它们提供给不同的模型,还是将它们保存到不同的文件,或者使用 lapply 或 for 循环遍历它们,所有这些都可以通过将它们保存在一个列表中来完成 -
对我来说,当我将两个列表放在一个列表中时,代码的含义更复杂。