2016-07-09 8 views
0

zu implementieren Ich versuche, meinen Benutzern die Möglichkeit zu geben, die Art der Analyse in einer App zu variieren, und so muss ich die verwendete Funktion variieren ... Das ist nicht so geradlinig wie es klingt ... Es gibt verschiedene Layoutalgorithmen im r-Paket von igigraph, die jeweils in einem Befehl wie "layout.fruchterman.reingold", "layout.drl", "layout_with_kk" usw. implementiert sind.Wie man eine Funktion variiert, die verwendet wird, um verschiedene Arten der Analyse in glänzenden

ich möchte irgendwie meine Benutzer in der Lage sein den Befehl zu implementieren, was immer Algorithmus sie im folgenden Code wie wählen zu lassen:

shinyUI(plotOutput("graph")) 


serveractual <- function(input, output) { 
output$graph<-renderPlot({ 
    adj_mat<-adjacency(adj) 
    g <- simplify(graph.adjacency(adj_mat, mode='directed', weighted=TRUE, add.colnames=NA)) 
    coords_fr = layout.fruchterman.reingold(g, weights=E(g)$weight) 
    plot.igraph(g, layout=coords_fr, vertex.label=NA) 
    }) 
} 
shinyApp(uiactual, server actual) 

Zuerst habe ich versucht:

selectInput(inputId = "adj", "choose graph type", choices=c("layout.fruchterman.reingold", "layout.drl", "layout_with_kk")), 

coords_fr = input$adj(g, weights=E(g)$weight) 

aber natürlich Parametervariation nicht so funktioniert.

Also wie implementiere ich "selectInput", um die Funktion für die Analyse zu variieren? Irgendwelche Tipps?

PS. Sie können die „adj“ Objekt (Adjazenzmatrix) in Ihrer lokalen R-Umgebung, um die glänzende App mit dem folgenden Code definieren auszuführen:

set.seed(1) 

# generate a couple clusters 
nodes_per_cluster <- 30 
n <- 10 

nvals <- nodes_per_cluster * n 

# cluster 1 (increasing) 
cluster1 <- matrix(rep((1:n)/4, nodes_per_cluster) + 
        rnorm(nvals, sd=1), 
        nrow=nodes_per_cluster, byrow=TRUE) 

# cluster 2 (decreasing) 
cluster2 <- matrix(rep((n:1)/4, nodes_per_cluster) + 
        rnorm(nvals, sd=1), 
        nrow=nodes_per_cluster, byrow=TRUE) 

# noise cluster 
noise <- matrix(sample(1:2, nvals, replace=TRUE) + 
       rnorm(nvals, sd=1.5), 
       nrow=nodes_per_cluster, byrow=TRUE) 

dat <- rbind(cluster1, cluster2, noise) 
colnames(dat) <- paste0('n', 1:n) 
rownames(dat) <- c(paste0('cluster1_', 1:nodes_per_cluster), 
        paste0('cluster2_', 1:nodes_per_cluster), 
        paste0('noise_', 1:nodes_per_cluster)) 

adj<-dat 

Antwort

0

sortierte es mit dem folgenden:

ui.R 
radioButtons("type", "Distribution type:", 
       c("Normal" = "norm", 
        "Reingold" = "r", 
        "DRL" = "drl", 
        "Lay out with KK" = "layout"), selected = "Reingold") 
server.R 
data <- reactive({ 
    layout_style <- switch(input$type, 
        norm = layout.norm, 
        r = layout.fruchterman.reingold, 
        drl = layout.drl, 
        layout=lay_with_kk) 
    }) 
coords_fr = data()(g, weights=E(g)$weight) 
Verwandte Themen