私は比較的Rに慣れていて、さらにシャイニー(文字通り最初の1日)の新人です。Rでのテキスト入力の操作Shiny
複数のフレーズをコンマで区切って入力したい場合は、female, aged, diabetes mellitus.
を入力してください。データフレームには、1つの変数MH2
にテキストが含まれています。私は、入力されたフレーズがすべて存在する行だけを含むデータフレームを出力したいと思います。時々、ユーザは入力のみで1フレーズ、他の回5
は、これは私のui.R
library(shiny)
library(stringr)
# load dataset
load(file = "./data/all_cardiovascular_case_reports.Rdata")
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
textInput(inputId = "phrases",
label = "Please enter all the MeSH terms that you would like to search, each separated by a comma:",
value = ""),
helpText("Example: female, aged, diabetes mellitus")
),
mainPanel(DT::dataTableOutput("dataframe"))
)
)
と、ここで私はrenderText({num_phrases})
Iを実行しようとしたとき、私のserver.Rが
library(shiny)
server <- function(input, output)
{
# where all the code will go
df <- reactive({
# counts how many phrases there are
num_phrases <- str_count(input$phrases, pattern = ", ") + 1
a <- numeric(num_phrases) # initialize vector to hold all phrases
# create vector of all entered phrases
for (i in 1:num_phrases)
{
a[i] <- noquote(strsplit(input$phrases, ", ")[[i]][1])
}
# make all phrases lowercase
a <- tolower(a)
# do exact case match so that each phrase is bound by "\\b"
a <- paste0("\\b", a, sep = "")
exact <- "\\b"
a <- paste0(a, exact, sep = "")
# subset dataframe over and over again until all phrases used
for (i in 1:num_phrases)
{
final <- final[grepl(pattern = a, x = final$MH2, ignore.case = TRUE), ]
}
return(final)
})
output$dataframe <- DT::renderDataTable({df()})
}
ですコンマで区切られた複数のフレーズを入力しても一貫して1
が得られました。それ以来、複数のフレーズを入力しようとするたびに、「エラー:添え字が範囲外です」と表示されます。しかし、カンマとスペース(カンマとスペース)で区切られた単語を入力すると、問題は消えますが、データフレームは正しくサブセット化されません。 1つのフレーズしかサブセット化できません。
お知らせください。
ありがとうございました。
ありがとうございました!はい、これはまさに私が探していたものです。すべてのフレーズに一致するコードを使用しました。再度、感謝します! – sweetmusicality
問題はありません。うれしいです! – Florian
おっと、それを指摘してくれてありがとう、それを固定しました! – Florian