/>
小さな工夫と発見の蓄積
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
library(shiny) ui <- list( textInput('text1', 'Text 1', value=''), textInput('text2', 'Text 2', value=''), textInput('text3', 'Text 3', value=''), hr(), textOutput('out1'), textOutput('out2'), textOutput('out3') )
server1 <- function(input, output) { output$out1 <- renderText({ input$text1 }) output$out2 <- renderText({ input$text2 }) output$out3 <- renderText({ input$text3 }) } runApp(list(ui=ui, server=server1))
"i <- 1"
をアンコメントすると、すべてtext1を参照するようになる。
server2 <- function(input, output) { for (i in 1:3) { output[[paste('out', i, sep='')]] <- renderText({ input[[paste('text', i, sep='')]] }) } #i <- 1 } runApp(list(ui=ui, server=server2))
server3 <- function(input, output) { lapply(1:3, function(i) { output[[paste('out', i, sep='')]] <- renderText({ input[[paste('text', i, sep='')]] }) } ) } runApp(list(ui=ui, server=server3))
server4 <- function(input, output) { for (i in 1:3) { local({ j <- i output[[paste('out', j, sep='')]] <- renderText({ input[[paste('text', j, sep='')]] }) }) } } runApp(list(ui=ui, server=server4))
library(shiny) ui <- list( textInput('line', 'Type a line here.'), actionButton('insert', 'OK'), p(strong('Your sentenses will be displayed below')), verbatimTextOutput('display') )次のようなserverを考える。OKボタンに反応するobserverを用意して、ボタンが押され時に、ディスプレイの文字列に入力された文字列を結合しようとしている。
Reading objects from shinyoutput object not allowed.
どうやら、直接outputの値にアクセスすることができない仕組みになっているらしい。
server1 <- function(input, output, session) { observeEvent(input$insert, { output$display <- renderText({ paste(output$display, input$line, sep='\n') }) updateTextInput(session, 'line', value='') } ) } runApp(list(ui=ui, server=server1))
server2 <- function(input, output, session) { D <- character(0) output$display <- renderText({ D }) observeEvent(input$insert, { D <- c(D, input$line) updateTextInput(session, 'line', value='') output$display <- renderText({ paste(D, collapse='\n') }) } ) } runApp(list(ui=ui, server=server2))
library(R6) Doc <- R6Class('document', public=list( text = character(0), initialize = function(init=character(0)) { self$text <- init } ) ) server3 <- function(input, output, session) { D <- Doc$new() output$display <- renderText({ paste(D$text, collapse='\n') }) observeEvent(input$insert, { D$text <- c(D$text, input$line) updateTextInput(session, 'line', value='') output$display <- renderText({ paste(D$text, collapse='\n') }) } ) } runApp(list(ui=ui, server=server3))
renderText
の処理が observeEvent
内にあるのは重要で、外側に配置してしまうと、ディスプレイの値が変化していかない。裏側でDオブジェクトの値は更新されるのだが、そのことをshinyの機能が認知しないため、いつまでたっても処理が開始されないのだ。下記がその例。
server4 <- function(input, output, session) { D <- Doc$new() observeEvent(input$insert, { D$text <- c(D$text, input$line) updateTextInput(session, 'line', value='') print(D$text) } ) output$display <- renderText({ paste(D$text, collapse='\n') }) } runApp(list(ui=ui, server=server4))
observeEvent
が優先される仕様なのか、単に運が良いだけなのかは分からない。
server5 <- function(input, output, session) { D <- Doc$new() observeEvent(input$insert, { D$text <- c(D$text, input$line) updateTextInput(session, 'line', value='') } ) output$display <- renderText({ input$insert paste(D$text, collapse='\n') }) } runApp(list(ui=ui, server=server5))
server6 <- function(input, output, session) { V <- reactiveValues(text = character(0)) observeEvent(input$insert, { V$text <- c(V$text, input$line) updateTextInput(session, 'line', value='') } ) output$display <- renderText({ paste(V$text, collapse='\n') }) } runApp(list(ui=ui, server=server6))
ERROR: dependencies ‘httr’, ‘RCurl’, ‘rversions’, ‘git2r’ are not available for package ‘devtools’OSはlubuntu14.04. RのバージョンはR version 3.1.0 (2014-04-10).
sudo apt-get install libcurl4-gnutls-dev
checking for library containing SSL_library_init... no configure: error: in `/tmp/RtmpymzMhG/R.INSTALL29921535f41e/git2r': configure: error: OpenSSL library required See `config.log' for more details ERROR: configuration failed for package ‘git2r’ * removing ‘/home/kota/R/x86_64-pc-linux-gnu-library/3.1/git2r’ Warning in install.packages : installation of package ‘git2r’ had non-zero exit status ERROR: dependency ‘git2r’ is not available for package ‘devtools’
sudo apt-get install libcrypto++ libssl-devここまで設定すると、ようやくインストールに成功した。
install.packages('devtools')
library(R6) A <- R6Class('A', public = list( number=NA, initialize = function(number) { self$number <- number reg.finalizer( self, function(e) cat('Garbage collected! #', e$number, '\n'), onexit = TRUE ) } ) ) a <- list(A$new(1), A$new(2), A$new(3)) gc() # clean up the garbage created when initializing # when the list is removed, all three instances are 'garbage' rm(a) gc() #Garbage collected! # 3 #Garbage collected! # 2 #Garbage collected! # 1 # used (Mb) gc trigger (Mb) max used (Mb) #Ncells 567894 30.4 1168576 62.5 1168576 62.5 #Vcells 821924 6.3 2994598 22.9 54470995 415.6 a <- list(A$new(1), A$new(2), A$new(3)) gc() # remove the reference to the 1st element. a <- a[-1] gc() #Garbage collected! # 1 # used (Mb) gc trigger (Mb) max used (Mb) #Ncells 567896 30.4 1168576 62.5 1168576 62.5 #Vcells 821917 6.3 2994598 22.9 54470995 415.6 # let another variable refer to the first element b <- a[[1]] rm(a) gc() #Garbage collected! # 3 # used (Mb) gc trigger (Mb) max used (Mb) #Ncells 567879 30.4 1168576 62.5 1168576 62.5 #Vcells 821913 6.3 2994598 22.9 54470995 415.6
lsb_release -dとすればいい。
sudo apt-get update sudo apt-get install r-base-core
> install.packages('nleqslv', repos='http://cran.md.tsukuba.ac.jp/')