闪亮的零索引问题和过滤问题

问题描述

我正在尝试通过交互式网络构建出色的应用程序,但是我遇到了两个问题。

首先,我无法弄清为什么我对零索引确实有问题,因为我使用了解决方案来对其进行修复,但是它无法正常工作。另一方面,也许我做错了。

其次,我在基于组(list_initiators $ factions)过滤节点时遇到问题。目前,当我想更改“连接”时,该图会做出反应,但是它在派系方面存在一些故障。我希望该图仅显示派系中具有连接的节点。当我取消选中边箱中的某些派系时,在没有连接的情况下该图将冻结,并且无法正常响应。您也可以在表格中看到它。

这是我的代码

library(shiny)
library(dplyr)
library(tidyr)
library(networkD3)

list_initiators <- read.csv("https://raw.githubusercontent.com/Okssana/shiny_app_network/master/nodes_amends_20_09_2020.csv",fileEncoding = "Windows-1251") %>%
  select(-X)

edges_for_gephy <- read.csv("https://raw.githubusercontent.com/Okssana/shiny_app_network/master/edges_amends_20_09_2020.csv") %>% 
  select(-X)


# UI ####
ui <- fluidPage(
  
  sidebarLayout(
    sidebarPanel(
      
      checkBoxGroupInput('factions_input','Choose faction',choices = unique(list_initiators$factions),selected = unique(list_initiators$factions)),sliderInput("amends_connection","Connections",min = 1,max = 15,value = 5)),mainPanel(forceNetworkOutput("network_amends"),tableOutput("table_nodes"),tableOutput("table_edges")
    )
  )
)


# server ####
server <- function(input,output,session) {
  
  # Download data
  list_initiators <- as.data.frame(list_initiators)
  edges_for_gephy <- as.data.frame(edges_for_gephy)
  
  # Nodes\vertices  
  nodes_rea <-reactive({
    
    nodes_reactive <- list_initiators%>%
      filter(factions %in% input$factions_input) 
  })
  
  # Edges\links   
  links_rea <-reactive({
    
    edges_reactive <- edges_for_gephy%>%
      filter(Value >= input$amends_connection) 
    
  })
  

# Render tables showing content of uploaded files 
output$table_edges <- renderTable({
  links_rea() # Edges
})

output$table_nodes <- renderTable({
  nodes_rea() #Nodes
})

output$network_amends <- renderForceNetwork({
  links1 <-links_rea()
  # These three lines have to solve problem with zero-indexing,but it doesn't work 
  # I still have this warning: It looks like Source/Target is not zero-indexed. This is required in JavaScript and so your plot may not render.
  links1$Source <- match(links_rea()$Source,nodes_rea()$ID_mps)-1
  links1$Target <- match(links_rea()$Target,nodes_rea()$ID_mps)-1
  
  forceNetwork(Links = links1,# source target   value
               Nodes = nodes_rea(),# name
               Source = "Source",Target = "Target",Value = "Value",Group = "factions",# Colors
               NodeID = "names_mps",Nodesize = "weight_name",opacity = 1,fontSize = 18,zoom = T,legend = TRUE,bounded = TRUE,charge=-10)
  
})


}

runApp(shinyApp(ui,server))

解决方法

在过滤节点数据帧(nodes_rea()之后,您的链接数据帧(links1 / links_rea())将具有链接/行,其中Source和/或在您的节点数据框中找不到Target值,因此,您的匹配命令为链接数据框中的节点重新索引将产生一些NA值。过滤掉链接数据框中首先排NA的那些行,并且应该起作用,即

links1 <- links1 %>% filter(!is.na(Source) & !is.na(Target))

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...