我試圖設置一些感覺應該很簡單的東西,但我找不出解決方案。我寫了一個精簡版的代碼,試圖在此過程中進行解釋。R - 基於年齡的殺戮
基本上,我想創造一羣「孩子」每一代。然後,爲每一代添加1,並在年齡大於3時刪除列表條目。代碼幾乎可行 - 我認爲問題與調用fl的長度然後從列表中刪除行有關,但我不確定。最終結果(fl)如果工作正常,則不應該有大於3的條目。
代碼:
#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
#START GEN LOOP
i3 <- 0
while (i3 < generations) {
i3 <- i3 + 1
#CREATE CHILDREN
for (i5 in 1:children) {
cl[[i5]] <- 0
}
#ADD CHILDREN TO FINAL LIST
fl <- c(fl, cl)
#ADD 1 TO AGE
for (i6 in 1:length(fl)) {
fl[[i6]] <- fl[[i6]] + 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]
}
}
#CLOSE GEN LOOP
}
fl
謝謝!
在循環的第一次迭代的東西可讀,你的父母是0,因此是添加的兒童(添加歲後的孩子被添加到'fl')。這是故意的嗎? – kungfujam 2014-10-05 20:58:50
@kungfujam在將它們添加到'fl'後,它看起來像所有的年齡都會立即增加。 – shadowtalker 2014-10-05 21:01:44
是 - 有意。我希望他們在複製發生後(年齡結束)老化。 – jdfinch3 2014-10-05 21:06:07