提问人:Clément Raspail 提问时间:10/22/2023 更新时间:10/22/2023 访问量:42
在 R Shiny 中使用观察的无限循环
Infinite loop with observe in R Shiny
问:
我试着对植物列表进行选择的模拟。这是我在 R 中使用 lib Shiny 的代码:
server <- function(input, output) {
n_pop <- reactiveVal()
tab <- reactiveVal()
S <- 0.5
avantage_eau <- 1.1
generation <- 0
generation_max <- 10
phenotype <- c("AB", "Ab", "aB", "ab")
#Constructeur
creer_plante <- function(type, age) {
plante <- list(type = type, age = age)
class(plante) <- "plante"
return(plante)
}
#Getteurs
get_type <- function(plante) {
return(plante$type)
}
get_age <- function(plante) {
return(plante$age)
}
#Affichage
afficher_pheno_plantes <- function(tableau) {
pie(table(sapply(tableau, get_type)))
}
afficher_age_plantes <- function(tableau) {
pie(table(sapply(tableau, get_age)))
}
#Fonction
vieillir <- function(plante) {
return(creer_plante(get_type(plante), get_age(plante) + 1))
}
selection_nat <- function(tableau){
tab_temp <- list()
for (i in 1:n_pop()) {
if (grepl("B", get_type(tableau[[i]]))) {
if (runif(1) < S * avantage_eau) {
tab_temp <- append(tab_temp, list(vieillir(tableau[[i]])))
}
} else {
if (runif(1) < S) {
tab_temp <- append(tab_temp, list(vieillir(tableau[[i]])))
}
}
}
return(tab_temp)
}
creation_tab <- function() {
tab_temp <- list()
for (i in 1:n_pop()) {
nouvelle_plante <- creer_plante(phenotype[sample(1:4, 1)], 0)
tab_temp <- append(tab_temp, list(nouvelle_plante))
}
return(tab_temp)
}
observe({
n_pop(input$n)
tab(creation_tab())
t <- tab()
while (generation < generation_max) {
# t <- selection_nat(t)
n_pop(length(t))
if (n_pop() == 0) {
break
}
generation <- generation + 1
}
tab(t)
})
output$distPlot <- renderPlot({
par(mfrow = c(2, 1))
afficher_age_plantes(tab())
afficher_pheno_plantes(tab())
# cat(length(tab()), "plantes vivantes\n")
})
}
我在观察中注释了 (# t <- selection_nat(t)) 中的行,因为我进入了无限循环。 在这里,我尝试将我的选择功能应用于 t 或 tab() 中的值 containe。
如果有人知道如何帮助我。谢谢 <3
答: 暂无答案
评论
observe({})
observeEvent( c( reactvar1, reactvar2) ),{ bla bla})
bindEvent
isolate()
while
n_pop
tab
observe()