library(LevinsLoops) data("cm.levins", package="LoopAnalyst") nodeNames = rownames(cm.levins) make.M = reactive({ # if(!is.null(input$X1X1)) # M = cbind(c(input$X1X1, input$X1X2), # c(input$X2X1, input$X2X2) ) # else M = cm.levins Mtry = try({ for(X1 in nodeNames) for(X2 in nodeNames) M[X2,X1] = input[[nodeNameID(X1,X2)]] }) print(M) print(Mtry) print(class(Mtry)) if(class(Mtry) == 'try-error' | is.null(Mtry)) returnVal = M else returnVal = Mtry (returnVal) }) nodeNameID = function(n1, n2) paste0("Input", n1, n2, sep="_") nodeNameLabel = function(n1, n2) paste(n1, n2, sep="->") #output$sliders = #renderUI( makeSliders = function() { M = cm.levins nameGrid = expand.grid(rownames(M), rownames(M), stringsAsFactors = FALSE) #print(nameGrid) returnVal = lapply(1:nrow(nameGrid), function(linkNum) { nodes = unlist(nameGrid[linkNum, ]) node_to = nodes[1] node_from = nodes[2] numericInput(inputId = nodeNameID(node_from, node_to), label = nodeNameLabel(node_from, node_to), min = -1.5, max = 1.5, value = M[node_to, node_from], step = 0.01) } ) returnVal = lapply( split(1:length(returnVal), (-1 + 1:length(returnVal))%/%length(returnVal) ), function(sliders) fluidRow( lapply(returnVal[sliders], column, width=3) )) #shiny::tagAppendAttributes() returnVal } renderTable({ make.M() }) fluidPage( makeSliders() ) renderPlot({ library(LevinsLoops) result = dynamSim(M = make.M(), returnLast = TRUE) abline(h=result) if(exists("previousResult")) abline(h=previousResult, lty=2) previousResult <<- result })
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.