【发布时间】:2014-07-01 17:41:53
【问题描述】:
我正在尝试使用嵌套 for 循环复制实验室存储系统中使用的 81 位低温箱。以下代码说明了使用 3 位框的问题:
urine_random_df <- as.data.frame(c(seq(from = 10, to = 12, by = 1)))
boxcells <- vector()
cell_placeholder <- as.data.frame(c(seq(from = 1, to = 3, by = 1)))
for (i in 1: 3){
#boxcells <- paste0("NEW", sprintf("%04d", as.numeric(urine_random_df[i,])))
for (j in 1: nrow(cell_placeholder)){
boxcells <- c(boxcells, paste(paste0("NEW", sprintf("%04d", as.numeric(urine_random_df[i,]))), cell_placeholder[j,], sep = "-"))
}
}
boxcells <- data.frame(boxcells)
names(boxcells) <- "box cells"
boxcells
上面的结果是:
box cells
1 NEW0010-1
2 NEW0010-2
3 NEW0010-3
4 NEW0011-1
5 NEW0011-2
6 NEW0011-3
7 NEW0012-1
8 NEW0012-2
9 NEW0012-3
但是,我想将单元格分组到它们各自的框下,如下所示:
box cells
1 NEW0010
2 NEW0010-1
3 NEW0010-2
3 NEW0010-3
4 NEW0011
5 NEW0011-1
6 NEW0011-2
7 NEW0011-3
8 NEW0012
9 NEW0012-1
10 NEW0012-2
11 NEW0012-3
我试图通过在外循环中添加boxcells <- paste0("NEW", sprintf("%04d", as.numeric(urine_random_df[i,]))) 来实现这一点。当我用这段代码重新运行代码时,我只得到最后一个框,如下所示:
box cells
1 NEW0012
2 NEW0012-1
3 NEW0012-2
4 NEW0012-3
似乎循环的每次迭代都会删除最后一个,这样在整个循环完成后,只剩下最后一个框。我发现了一个existing thread here,它建议将“初始化语句”移到循环之外。但是,在这种情况下,初始化语句 urine_random_df...、boxcells... 和 cell_placeholder... 已经在循环之外。想法?
【问题讨论】:
-
为什么要这样的输出?您可以使用此类结果进行进一步处理。您需要将结果放在列表中或包含 2 列( id 、值)的 data.frame 中。
-
@sedeh,你为什么不考虑按照我建议的方式做呢?你为什么要坚持使用 R 中非常低效的嵌套
for循环? -
@DavidArenburg 我认为你是对的。您的代码似乎运行良好。我试图了解代码中发生了什么,并可能选择它作为我的答案。
标签: r loops for-loop nested-loops