в Shiny.
задачи у меня две:
1) для одного из инпутов фильтровать опции в зависимости от трёх других,
2) для рендерящегося плотли фильтровать дата-пойнты в зависимости от всех инпутов.
и в обоих случаях ошибка одна и та же:
`Предупреждение: Error in : Problem with filter() input ..1. x аргумент нулевой длины` — и или не рендерящийся инпут, или плотли.
я знаю, что такая ошибка возникает, если фильтровать пытаются по NULL (хотя дефолтные значения у меня в каждом инпуте стоят), погуглил и нашёл решение — каждый фильтр обрамил в конструкцию типа
filter(if(!is.null(input$subject_input_res)) subject == input$subject_input_res else TRUE)
так вот после того, как я это сделал, ошибки исчезли, предупреждения тоже, но рендериться перестало вообще всё, кроме первых двух инпутов. при том, что синтаксис их совпадает полностью, например, с синтаксисом следующих двух — но рендерятся только первые.
может, кто-то сталкивался с таким трэшем?
Может из инпутов читается неправильно? У меня было такое когда индекс забыл проставить
Чет без кода непонятно. У вас в первом инпуте при изменении трех других должны элементы интерфейса меняться? (Грубо говоря в инпуте 1 названия переменных датасета, а в инпуте два - выбор датасета. При выборе новых данных должен обновиться список с переменными)
смотрите, у меня иерархическая фильтрация: есть задачки, каждая принадлежит к классу, предмету и уровню. а ещё каждая принадлежит к модулю. модулей дохрена (больше 10к), но их количество можно сократить, если задать класс, предмет и уровень. поэтому я пытаюсь отфильтровать список модулей (а это один из инпутов) по классу, предмету и уровню (предыдущие три инпута)
Понятно. В любом случае сравнивать лучше через %in% вместо ==, как тут уже написали. Еще вы добавили условие !is.null() мне кажется, это лучше вынести в реактивные условия. Т.е. чтобы ваш фильтр отрабатывался когда меняется один из инпутов. Либо делать validate для проверки корректности фильтров
Я б сделал reprex, чтобы было проще помогать
Обсуждают сегодня