基于年龄的R-kill

基于年龄的R-kill,r,list,loops,R,List,Loops,我试着设置一些感觉应该很简单的东西,但我想不出一个解决方案。我编写了一个精简版的代码,试图在编写过程中对其进行解释 基本上,我想每一代创造一组“孩子”。然后,将1添加到每代年龄,并在年龄>3时删除列表条目。该代码几乎可以工作-我认为问题在于调用fl的长度,然后从列表中删除行,但我不确定。如果最终结果(fl)工作正常,则其条目不应大于3 代码: #开始时的家长人数 家长通常在使用R时,您希望尽可能避免循环。它很慢,有一些功能可以用来避免它。我认为您的原始代码不能正常工作,因为您正在循环,您正在删除

我试着设置一些感觉应该很简单的东西,但我想不出一个解决方案。我编写了一个精简版的代码,试图在编写过程中对其进行解释

基本上,我想每一代创造一组“孩子”。然后,将1添加到每代年龄,并在年龄>3时删除列表条目。该代码几乎可以工作-我认为问题在于调用fl的长度,然后从列表中删除行,但我不确定。如果最终结果(fl)工作正常,则其条目不应大于3

代码:

#开始时的家长人数

家长通常在使用R时,您希望尽可能避免循环。它很慢,有一些功能可以用来避免它。我认为您的原始代码不能正常工作,因为您正在循环,您正在删除一个元素,然后索引将更改,然后在下一次迭代中,您将删除错误的元素。我修改了你的代码,看看你怎么想:

#NUMBER OF PARENTS TO START WITH
parents <- 10
#NUMBER OF GENERATIONS TO RUN
generations <- 5
#NUMBER OF CHILDREN TO CREATE EACH GENERATION
children <- 5
#AGE TO KILL
death <- 3

pl <- list()
cl <- list()
fl <- list()
kl <- list()

#CREATE PARENTS
# for (i2 in 1:parents) {
#     pl[[i2]] <- 0
# }
fl <- pl <- as.list(rep(0, parents))

# fl <- pl


#START GEN LOOP

i3 <- 0
while (i3 < generations) {
    i3 <- i3 + 1


    #CREATE CHILDREN
#     for (i5 in 1:children) {
#         cl[[i5]] <- 0
#     }

    cl <- as.list(rep(0, children))

    #ADD CHILDREN TO FINAL LIST
    fl <- c(fl, cl)

    #ADD 1 TO AGE
#     for (i6 in 1:length(fl)) {
#         fl[[i6]] <- fl[[i6]] + 1
#     }
    fl <- lapply(fl, function(x) x+1)

    ###PROBLEM###
    #KILL BASED ON AGE
#     i4 <- 0
#     while (i4 < length(fl)) {
#         i4 <- i4 + 1
#         if (fl[[i4]] > death) {
#             
#             #ADD TO KILL LIST FOR DEBUGGING
#             kl <- c(kl, fl[[i4]])
#             
#             #REMOVE FROM fl
#             fl <- fl[-c(i4), drop=FALSE]
#         }
#     }
    fl <- fl[fl <= death]    

    #CLOSE GEN LOOP
}

fl
#开始时的家长人数

家长通常在使用R时,您希望尽可能避免循环。它很慢,有一些功能可以用来避免它。我认为您的原始代码不能正常工作,因为您正在循环,您正在删除一个元素,然后索引将更改,然后在下一次迭代中,您将删除错误的元素。我修改了你的代码,看看你怎么想:

#NUMBER OF PARENTS TO START WITH
parents <- 10
#NUMBER OF GENERATIONS TO RUN
generations <- 5
#NUMBER OF CHILDREN TO CREATE EACH GENERATION
children <- 5
#AGE TO KILL
death <- 3

pl <- list()
cl <- list()
fl <- list()
kl <- list()

#CREATE PARENTS
# for (i2 in 1:parents) {
#     pl[[i2]] <- 0
# }
fl <- pl <- as.list(rep(0, parents))

# fl <- pl


#START GEN LOOP

i3 <- 0
while (i3 < generations) {
    i3 <- i3 + 1


    #CREATE CHILDREN
#     for (i5 in 1:children) {
#         cl[[i5]] <- 0
#     }

    cl <- as.list(rep(0, children))

    #ADD CHILDREN TO FINAL LIST
    fl <- c(fl, cl)

    #ADD 1 TO AGE
#     for (i6 in 1:length(fl)) {
#         fl[[i6]] <- fl[[i6]] + 1
#     }
    fl <- lapply(fl, function(x) x+1)

    ###PROBLEM###
    #KILL BASED ON AGE
#     i4 <- 0
#     while (i4 < length(fl)) {
#         i4 <- i4 + 1
#         if (fl[[i4]] > death) {
#             
#             #ADD TO KILL LIST FOR DEBUGGING
#             kl <- c(kl, fl[[i4]])
#             
#             #REMOVE FROM fl
#             fl <- fl[-c(i4), drop=FALSE]
#         }
#     }
    fl <- fl[fl <= death]    

    #CLOSE GEN LOOP
}

fl
#开始时的家长人数

家长通常在使用R时,您希望尽可能避免循环。它很慢,有一些功能可以用来避免它。我认为您的原始代码不能正常工作,因为您正在循环,您正在删除一个元素,然后索引将更改,然后在下一次迭代中,您将删除错误的元素。我修改了你的代码,看看你怎么想:

#NUMBER OF PARENTS TO START WITH
parents <- 10
#NUMBER OF GENERATIONS TO RUN
generations <- 5
#NUMBER OF CHILDREN TO CREATE EACH GENERATION
children <- 5
#AGE TO KILL
death <- 3

pl <- list()
cl <- list()
fl <- list()
kl <- list()

#CREATE PARENTS
# for (i2 in 1:parents) {
#     pl[[i2]] <- 0
# }
fl <- pl <- as.list(rep(0, parents))

# fl <- pl


#START GEN LOOP

i3 <- 0
while (i3 < generations) {
    i3 <- i3 + 1


    #CREATE CHILDREN
#     for (i5 in 1:children) {
#         cl[[i5]] <- 0
#     }

    cl <- as.list(rep(0, children))

    #ADD CHILDREN TO FINAL LIST
    fl <- c(fl, cl)

    #ADD 1 TO AGE
#     for (i6 in 1:length(fl)) {
#         fl[[i6]] <- fl[[i6]] + 1
#     }
    fl <- lapply(fl, function(x) x+1)

    ###PROBLEM###
    #KILL BASED ON AGE
#     i4 <- 0
#     while (i4 < length(fl)) {
#         i4 <- i4 + 1
#         if (fl[[i4]] > death) {
#             
#             #ADD TO KILL LIST FOR DEBUGGING
#             kl <- c(kl, fl[[i4]])
#             
#             #REMOVE FROM fl
#             fl <- fl[-c(i4), drop=FALSE]
#         }
#     }
    fl <- fl[fl <= death]    

    #CLOSE GEN LOOP
}

fl
#开始时的家长人数

家长通常在使用R时,您希望尽可能避免循环。它很慢,有一些功能可以用来避免它。我认为您的原始代码不能正常工作,因为您正在循环,您正在删除一个元素,然后索引将更改,然后在下一次迭代中,您将删除错误的元素。我修改了你的代码,看看你怎么想:

#NUMBER OF PARENTS TO START WITH
parents <- 10
#NUMBER OF GENERATIONS TO RUN
generations <- 5
#NUMBER OF CHILDREN TO CREATE EACH GENERATION
children <- 5
#AGE TO KILL
death <- 3

pl <- list()
cl <- list()
fl <- list()
kl <- list()

#CREATE PARENTS
# for (i2 in 1:parents) {
#     pl[[i2]] <- 0
# }
fl <- pl <- as.list(rep(0, parents))

# fl <- pl


#START GEN LOOP

i3 <- 0
while (i3 < generations) {
    i3 <- i3 + 1


    #CREATE CHILDREN
#     for (i5 in 1:children) {
#         cl[[i5]] <- 0
#     }

    cl <- as.list(rep(0, children))

    #ADD CHILDREN TO FINAL LIST
    fl <- c(fl, cl)

    #ADD 1 TO AGE
#     for (i6 in 1:length(fl)) {
#         fl[[i6]] <- fl[[i6]] + 1
#     }
    fl <- lapply(fl, function(x) x+1)

    ###PROBLEM###
    #KILL BASED ON AGE
#     i4 <- 0
#     while (i4 < length(fl)) {
#         i4 <- i4 + 1
#         if (fl[[i4]] > death) {
#             
#             #ADD TO KILL LIST FOR DEBUGGING
#             kl <- c(kl, fl[[i4]])
#             
#             #REMOVE FROM fl
#             fl <- fl[-c(i4), drop=FALSE]
#         }
#     }
    fl <- fl[fl <= death]    

    #CLOSE GEN LOOP
}

fl
#开始时的家长人数

父级当您从列表中删除元素时,您没有相应地调整
i4
。试试这个:

  ###FIXED###
  #KILL BASED ON AGE
  i4 <- 0
  while (i4 < length(fl)) {
    i4 <- i4 + 1
    if (fl[[i4]] > death) {
      #ADD TO KILL LIST FOR DEBUGGING
      kl <- c(kl, fl[[i4]])

      #REMOVE FROM fl
      fl <- fl[-c(i4), drop=FALSE]
      i4 <- i4 - 1 #                <------ added this line
    }
  }

从列表中删除元素时,您没有相应地调整
i4
。试试这个:

  ###FIXED###
  #KILL BASED ON AGE
  i4 <- 0
  while (i4 < length(fl)) {
    i4 <- i4 + 1
    if (fl[[i4]] > death) {
      #ADD TO KILL LIST FOR DEBUGGING
      kl <- c(kl, fl[[i4]])

      #REMOVE FROM fl
      fl <- fl[-c(i4), drop=FALSE]
      i4 <- i4 - 1 #                <------ added this line
    }
  }

从列表中删除元素时,您没有相应地调整
i4
。试试这个:

  ###FIXED###
  #KILL BASED ON AGE
  i4 <- 0
  while (i4 < length(fl)) {
    i4 <- i4 + 1
    if (fl[[i4]] > death) {
      #ADD TO KILL LIST FOR DEBUGGING
      kl <- c(kl, fl[[i4]])

      #REMOVE FROM fl
      fl <- fl[-c(i4), drop=FALSE]
      i4 <- i4 - 1 #                <------ added this line
    }
  }

从列表中删除元素时,您没有相应地调整
i4
。试试这个:

  ###FIXED###
  #KILL BASED ON AGE
  i4 <- 0
  while (i4 < length(fl)) {
    i4 <- i4 + 1
    if (fl[[i4]] > death) {
      #ADD TO KILL LIST FOR DEBUGGING
      kl <- c(kl, fl[[i4]])

      #REMOVE FROM fl
      fl <- fl[-c(i4), drop=FALSE]
      i4 <- i4 - 1 #                <------ added this line
    }
  }


在循环的第一次迭代中,您的父母是0,您添加的孩子也是0(您在孩子添加到
fl
之后添加年龄)。这是故意的吗?@kungfujam看起来他们所有的年龄在加入
fl
后都会立即增加。是的-故意的。我希望他们在复制发生后(世代结束)变老。在循环的第一次迭代中,你的父母是0,你添加的孩子也是0(你在孩子添加到
fl
后添加年龄)。这是故意的吗?@kungfujam看起来他们所有的年龄在加入
fl
后都会立即增加。是的-故意的。我希望他们在复制发生后(世代结束)变老。在循环的第一次迭代中,你的父母是0,你添加的孩子也是0(你在孩子添加到
fl
后添加年龄)。这是故意的吗?@kungfujam看起来他们所有的年龄在加入
fl
后都会立即增加。是的-故意的。我希望他们在复制发生后(世代结束)变老。在循环的第一次迭代中,你的父母是0,你添加的孩子也是0(你在孩子添加到
fl
后添加年龄)。这是故意的吗?@kungfujam看起来他们所有的年龄在加入
fl
后都会立即增加。是的-故意的。我希望他们在复制发生后(这一代人的结束)变老。我真诚地感谢这些建议和批评。我自学了R语言,我非常习惯于使用其他语言的循环,这就是我的解决方案。我真的需要更好地学习如何使用lappy和for而不是while循环。还感谢您为我的实际代码提供了修复,并(更)雄辩地重写了整个过程!我真诚地感谢这些建议和批评。我自学了R语言,我非常习惯于使用其他语言的循环,这就是我的解决方案。我真的需要更好地学习如何使用lappy和for而不是while循环。还感谢您为我的实际代码提供了修复,并(更)雄辩地重写了整个过程!我真诚地感谢这些建议和批评。我自学了R语言,我非常习惯于使用其他语言的循环,这就是我的解决方案。我真的需要更好地学习如何使用lappy和for而不是while循环。还感谢您为我的实际代码提供了修复,并(更)雄辩地重写了整个过程!我真诚地感谢这些建议和批评。我自学了R语言,我非常习惯于使用其他语言的循环,这就是我的解决方案。我真的需要更好地学习如何使用lappy和for而不是while循环。还感谢您为我的实际代码提供了修复,并(更)雄辩地重写了整个过程!谢谢-您的解决方案有效,代码更简单。为了让我理解未来,你能解释“FL @ jdFiCH3在R,你可以使用逻辑向量的子集吗?考虑<代码>一个没有问题的JDFNCH3和感谢@ SSDECONTROL进入。