【问题标题】:Nested for loop giving error despite working non-nested尽管工作非嵌套,但嵌套 for 循环给出错误
【发布时间】:2018-07-19 09:55:18
【问题描述】:

我在使用嵌套 for 循环时遇到了一些问题。如果我在不嵌套 for 循环的情况下运行代码,我会得到我想要的结果。我需要它在巢内发生,但我目前收到一条错误消息:

"data.frame(..., check.names = FALSE) 中的错误:参数暗示不同的行数:0, 1"

虽然,当我在 for 循环之外运行它时,我没有得到这个。你对我应该如何继续作为嵌套循环运行有什么建议吗?

这里是示例数据

Route    Year    ID   Amount
1         1       A       5
1         2       A       2
1         3       A       7
1         4       A       1
1         1       B       5
1         2       B       11
1         3       B       0
1         4       B       2

ID_list<- unique(data$ID)

for(i in 1:length(ID_list)){
ID <- data[which(data$ID== ID_list[i]), ]
route_list <- unique(ID$Route)
for(j in 1:length(route_list)){
SP_R <- ID[which(ID$Route == route_list[j]), ]
for(k in 1:(nrow(SP_R)-1)){
  for(l in (k+1):nrow(SP_R)){
    new_data<- rbind(new_data,cbind(SP_R[k,],SP_R[l,]))
  }}}}

这给了我错误。我猜这是因为 k 和 l 的长度不同,但是如果我在 for 循环之外运行最后一部分(作为一个单独的部分 - 见下文)它可以工作。

for(i in 1:length(ID_list)){
ID <- data[which(data$ID== ID_list[i]), ]
route_list <- unique(ID$Route)
for(j in 1:length(route_list)){
SP_R <- ID[which(ID$Route == route_list[j]), ]
}}

for(k in 1:(nrow(SP_R)-1)){
  for(l in (k+1):nrow(SP_R)){
    new_data<- rbind(new_data,cbind(SP_R[k,],SP_R[l,]))
  }}

我不知道为什么会这样。感谢您的意见!

【问题讨论】:

  • IDall_fiftySP_R 等,它们是什么?请发帖reproducible example
  • 对不起!我添加了一些示例数据,并清除了数据框名称。 ID 只是物种 ID。我基本上想对 ID 进行子集化,然后路由,然后将行组合在一起以获得更大的数据集。

标签: r for-loop nested nested-loops


【解决方案1】:

您必须像这样在 for 循环之外定义 new_data

new_data<-NULL

这将是你的输出:

for(i in 1:length(ID_list)){
   ID <- data[which(data$ID== ID_list[i]), ]
   route_list <- unique(ID$Route)
   for(j in 1:length(route_list)){
     SP_R <- ID[which(ID$Route == route_list[j]), ]
     for(k in 1:(nrow(SP_R)-1)){
       for(l in (k+1):nrow(SP_R)){
         new_data<- rbind(new_data,cbind(SP_R[k,],SP_R[l,]))
       }}}}

new_data
       Route Year ID Amount Route Year ID Amount
    1      1    1  A      5     1    2  A      2
    2      1    1  A      5     1    3  A      7
    3      1    1  A      5     1    4  A      1
    21     1    2  A      2     1    3  A      7
    22     1    2  A      2     1    4  A      1
    31     1    3  A      7     1    4  A      1
    5      1    1  B      5     1    2  B     11
    51     1    1  B      5     1    3  B      0
    52     1    1  B      5     1    4  B      2
    6      1    2  B     11     1    3  B      0
    61     1    2  B     11     1    4  B      2
    7      1    3  B      0     1    4  B      2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-12
    • 2012-10-10
    • 1970-01-01
    • 1970-01-01
    • 2020-05-21
    • 1970-01-01
    • 2015-04-08
    • 1970-01-01
    相关资源
    最近更新 更多