找不到闪亮的传单数据

时间:2015-12-23 04:43:43

标签: r leaflet

对于将呈现传单地图的闪亮应用程序,我使用'ggmap'包中的“Crime”数据集。我试图实现两个输入。一个是'进攻',另一个是'月'变量。这些变量可以从闪亮的下拉菜单中获得。目标是通过攻击类型和月份的组合来过滤和显示。防爆。例如,4月的抢劫......

如果被解雇,我会收到 <RadioGroup android:id="@+id/optionGroup" android:layout_width="wrap_content" android:layout_height="wrap_content"> <RadioButton android:id="@+id/radio1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:checked="true" android:text="RadioButton" android:textColor="@color/optionText" android:textSize="@dimen/text_exam" android:gravity="top" /> <RadioButton android:id="@+id/radio2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="RadioButton" android:textColor="@color/optionText" android:textSize="@dimen/text_exam" android:gravity="top" /> <RadioButton android:id="@+id/radio3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="RadioButton" android:textColor="@color/optionText" android:textSize="@dimen/text_exam" android:gravity="top" /> <RadioButton android:id="@+id/radio4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="RadioButton" android:textColor="@color/optionText" android:textSize="@dimen/text_exam" android:gravity="top" /> </RadioGroup> 错误。

这是一个提取数据的代码构造。

Point data not found;

1 个答案:

答案 0 :(得分:5)

要修复错误的过滤情况,您必须将代码切换为以下内容:

fData <- reactive({
  data <- hustonCrime
  if (input$offenseFilter != "All") {
    data <- subset(data, offense %in% input$offenseFilter)
  }
  if (input$monthFilter != "All") {
    data <- subset(data, month %in% input$monthFilter)
  }
  return(data)
})

您的代码中的问题是,您一直将data重置为hustonCrime的子集,而实际上,您希望保留data的子集。

修改

如评论中所示,此代码会累积过滤数据,而不是原始问题中的代码。为了看到这一点,让我们来看看每个代码发生的事情,因为输入在Shiny应用程序中被更改。

首先,我们不要改变任何东西。两个输入都设置为“全部”。

原始代码
Shiny加载应用程序并创建fData,因为它是一个反应元素。闪亮的步骤进入反应函数并将data设置为等于hustonCrime。然后,它会检查input$offenseFilterinput$monthFilter并看到它们都等于“全部”,并且不会对data进行任何更改。然后它返回data

新代码
完全相同的事情发生在原始代码中。

接下来,让我们看看当使用更改input$offenseFilter时会发生什么。

原始代码
Shiny认识到input$offenseFilter已发生变化并找到依赖于该变量的所有被动元素。它找到fData并进入代码。它将data设置为hustonCrime,然后检查input$offenseFilter是否等于“全部”。它发现它不是,并且它子集hustonCrime使得offenseinput$offenseFilter中元素向量中的值。接下来检查input$monthFilter是否等于“全部”并发现它是,因此它不做任何更改。该函数返回data,其设置为已过滤的hustonCrime

新代码
Shiny认识到input$offenseFilter已发生变化并找到依赖于该变量的所有被动元素。它找到fData并进入代码。它将data设置为hustonCrime,然后检查input$offenseFilter是否等于“全部”。它发现它不是并且它子集data NOT hustonCrime,这在下一步中很重要,并继续前进。它承认input$monthFilter等于“全部”并返回data,这是原始data的子集。

现在,让我们看看用户还选择月份过滤器的最后一步。

原始代码
闪烁进入fData反应函数并将data设置为hustonCrime。然后,它会使用data的子集覆盖hustonCrime,其中offense位于input$offenseFilter。接下来,它看到input$monthFilter不等于“全部”,并且它再次覆盖 data,其中hustonCrime的新子集位于month input$monthFilter中元素的向量。由于data刚被hustonCrime的子集覆盖,仅依赖于month,因此它不再包含offense过滤器。

新代码
在函数中有光泽的步骤,将data设置为hustonCrime,然后用自身的子集覆盖data,而不是hustonCrime数据集。接下来,它发现input$monthFilter不等于“全部”,并再次使用其自身的子集覆盖data。这很重要,因为在此步骤之前,data已被offense过滤而hustonCrime未过滤data。由于offense已经被month过滤了,因此按class MyAudioPlayer: NSObject, AVAudioPlayerDelegate { private static let sharedPlayer: MyAudioPlayer = { return MyAudioPlayer() }() private var container = [String : AVAudioPlayer]() static func playFile(name: String, type: String) { var player: AVAudioPlayer? let key = name+type for (file, thePlayer) in sharedPlayer.container { if file == key { player = thePlayer break } } if player == nil, let resource = NSBundle.mainBundle().pathForResource(name, ofType:type) { do { player = try AVAudioPlayer(contentsOfURL: NSURL(fileURLWithPath: resource), fileTypeHint: AVFileTypeMPEGLayer3) } catch { // error } } if let thePlayer = player { if thePlayer.playing { // already playing } else { thePlayer.delegate = sharedPlayer sharedPlayer.container[key] = thePlayer thePlayer.play() } } } } 过滤它现在可以为我们提供我们在过滤中寻找的互动。

最后,原始代码会使用整个数据集的子集覆盖数据,实际上我们希望保持对工作数据集的子集,以包括已选择的所有过滤器。