Я искал довольно долгое время для этого, но я не нашел решение моей проблемы. Я создаю приложение для управления проектами, и я хотел использовать блестящий, потому что я думал, что он сможет сделать приложение более интерактивным.R блестящий: динамическое создание табличного ввода разных типов
Таким образом, входы для приложения должны быть выполнены в приложении. Входы будут содержать число, текст и выбор. Для обзора входы, которые принадлежат друг другу, должны быть расположены в одной строке. Например:
resource_1, имя = 'конфокальный микроскоп', тип = 'машина', цена = 1000, price_type = 'EUR/использования'
Я хочу, чтобы организовать каждую запись в виде таблицы. Конечно, количество записей является переменным. Иногда вы можете определить 5 ресурсов для проекта, иногда 50.
Чтобы решить эту проблему, я создаю табличный элемент, блестящий с элементами html в качестве записей в таблице. Однако мне нужно динамически обращаться к этим записям. Я думал, что могу сделать это, вызвав строки символов входных идентификаторов каждой записи таблицы с помощью функции get(). Но это не работает.
Сейчас:
Я могу создать табличный с различными типами входных и переменным числом строк.
я могу назвать каждый из этих входов на самом деле вызовом ввода идентификатора (например, «входной $ element1_1»
, но я не могу сделать петлю, чтобы автоматически получить доступ к этим ввода идентификаторов, как с ГЭТ() : получить (paste0 ('вход $ элемент', I, '_', J))
минимальный пример:
library(shiny)
ui =
pageWithSidebar(
headerPanel("TEST"),
sidebarPanel(
helpText("number of resources"),
numericInput("nres","",3,min=0),
actionButton('create_res',"create",icon=icon("plus"),width='100%'),
br(),
br(),
br(),
bsButton('finish_res',"finish",width='100%',style="info"), # check matrix
width=2
),
mainPanel(
uiOutput('matrix_res'),
p("make an entry in row1 col1 and press finish"),
br(),
p("I can extract elements by calling input$element1_1:"),
textOutput('check1'),
br(),
p("but not by searching for the character string with get('element1_1') "),
textOutput('check2')
)
)
server =
function(input,output){
output$matrix_res <- renderTable({
input$create_res #create button dependency
Row_entries <- paste("ressource",1:isolate(input$nres)) #kill nres dependency
Col_entries <- c("text input","number input","selection")
matrix <- data.frame()
for (i in 1:length(Row_entries)) {
matrix[i,1] <- paste0("<input id='element", i, "_", 1, "' class='shiny-bound-input span6' type='text' value=''>")
matrix[i,2] <- paste0("<input id='element", i, "_", 2, "' class='shiny-bound-input span6' type='number' value=''>")
matrix[i,3] <- paste0("<div class='form-group shiny-input-container'>
<div>
<select id='element", i, "_", 3, "' class='form-control'><option value='a' selected>a</option>
<option value='b'>b</option></select>
<script type='application/json' data-for='element", i, "_", 3, "'>{}</script>
</div></div>")
}
colnames(matrix) <- Col_entries
matrix
},sanitize.text.function = identity)
output$check1<-renderText({
input$finish_res
isolate(input$element1_1)
})
output$check2<-renderText({
input$finish_res
isolate(input$get('element1_1'))
})
}
runApp(list(ui = ui, server = server))
Выполнить это: вы можете изменить количество строк, используя ввода номера и создать кнопку. Вы можете вызвать значение row1 column1, нажав кнопку «Готово».
Если у вас есть идеи, как получить эти входы, ответьте. Я застрял с этим дерьмом уже неделю ...