Прошедший текст для множественного выбора входа (R; Блестящий)

Вот начало, которое должно довести вас до сотен тысяч.

word2num <- function(word){
    wsplit <- strsplit(tolower(word)," ")[[1]]
    one_digits <- list(zero=0, one=1, two=2, three=3, four=4, five=5,
                       six=6, seven=7, eight=8, nine=9)
    teens <- list(eleven=11, twelve=12, thirteen=13, fourteen=14, fifteen=15,
                  sixteen=16, seventeen=17, eighteen=18, nineteen=19)
    ten_digits <- list(ten=10, twenty=20, thirty=30, forty=40, fifty=50,
                       sixty=60, seventy=70, eighty=80, ninety=90)
    doubles <- c(teens,ten_digits)
    out <- 0
    i <- 1
    while(i <= length(wsplit)){
        j <- 1
        if(i==1 && wsplit[i]=="hundred")
            temp <- 100
        else if(i==1 && wsplit[i]=="thousand")
            temp <- 1000
        else if(wsplit[i] %in% names(one_digits))
            temp <- as.numeric(one_digits[wsplit[i]])
        else if(wsplit[i] %in% names(teens))
            temp <- as.numeric(teens[wsplit[i]])
        else if(wsplit[i] %in% names(ten_digits))
            temp <- (as.numeric(ten_digits[wsplit[i]]))
        if(i < length(wsplit) && wsplit[i+1]=="hundred"){
            if(i>1 && wsplit[i-1] %in% c("hundred","thousand"))
                out <- out + 100*temp
            else
                out <- 100*(out + temp)
            j <- 2
        }
        else if(i < length(wsplit) && wsplit[i+1]=="thousand"){
            if(i>1 && wsplit[i-1] %in% c("hundred","thousand"))
                out <- out + 1000*temp
            else
                out <- 1000*(out + temp)
            j <- 2
        }
        else if(i < length(wsplit) && wsplit[i+1] %in% names(doubles)){
            temp <- temp*100
            out <- out + temp
        }
        else{
            out <- out + temp
        }
        i <- i + j
    }
    return(list(word,out))
}

Результаты:

> word2num("fifty seven")
[[1]]
[1] "fifty seven"

[[2]]
[1] 57

> word2num("four fifty seven")
[[1]]
[1] "four fifty seven"

[[2]]
[1] 457

> word2num("six thousand four fifty seven")
[[1]]
[1] "six thousand four fifty seven"

[[2]]
[1] 6457

> word2num("forty six thousand four fifty seven")
[[1]]
[1] "forty six thousand four fifty seven"

[[2]]
[1] 46457

> word2num("forty six thousand four hundred fifty seven")
[[1]]
[1] "forty six thousand four hundred fifty seven"

[[2]]
[1] 46457

> word2num("three forty six thousand four hundred fifty seven")
[[1]]
[1] "three forty six thousand four hundred fifty seven"

[[2]]
[1] 346457

Я уже могу сказать вам, что это не сработает для word2num("four hundred thousand fifty"), поскольку он не знает, как обрабатывать последовательные «сотни» и «тысячи» терминов, но алгоритм может быть модифицирован, вероятно. Любой человек должен отредактировать это, если у него есть улучшения или они будут построены на их собственном ответе. Я просто подумал, что это была забавная проблема для игры (на некоторое время).

Edit: Очевидно, у Билла Вейблса есть пакет под названием english , который может достичь этого даже лучше, чем выше кода.

0
задан Lynx 13 July 2018 в 04:37
поделиться

2 ответа

Оператор if останавливается, как только он встречает действительный оператор.

Не нужно, если здесь, вы можете просто вставить входные значения вместе:

library(shiny) 
server <- shinyServer( function(input, output) {
  output$whatever<-renderText( {
    vals <- paste(input$test, collapse = " ")
    paste("Your ideal(s) value(s) are", vals)

  }
  )
}

)

ui <- shinyUI(fluidPage(
  headerPanel(title="pratice"),
  sidebarLayout(
    sidebarPanel(
      selectInput("test",label="Test",multiple = TRUE, 
                  choices=list("a","b","c","d"), 
      )),
    mainPanel(
      textOutput("whatever")
    )
  )
)
)

shinyApp(ui, server)
0
ответ дан Colin FAY 17 August 2018 в 13:41
поделиться

вы можете использовать:

 selectizeInput(inputId, label, choices, selected = NULL, multiple = FALSE,
           options = NULL) ## and switch multiple to True
0
ответ дан JacobJacox 17 August 2018 в 13:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: