2017-06-15 9 views
2

複数の列を含むDTパッケージのデータテーブルがあり、そのうちの1つにURLが含まれています。これらのURLをユーザーがShinyアプリ内でクリックできるハイパーリンクとして表示する方法はありますか?さらに、URLが非常に長い場合(4番目のエントリであるランダムなgoogle検索のように)、最初の25文字だけがハイパーリンクの機能を破壊することなく表示されるようにすることができますか?光沢のある表示URLのデータテーブル

いくつかのサンプルコードは以下のとおりです。

require(DT) 
require(shiny) 

web_names <- c("google", "yahoo", "Stack Overflow", "Random Google Search") 
url <- c("https://www.google.com/", "https://www.yahoo.com/", "https://stackoverflow.com/", "https://www.google.com/search?q=random+google+search&oq=random+google+search&aqs=chrome..69i57j0l5.3264j0j7&sourceid=chrome&ie=UTF-8") 
websites <- data.frame(web_names, url) 

ui <- fluidPage(
    DT::dataTableOutput("websitesTable") 
) 


server<-function(input,output,session) { 
output$websitesTable <- DT::renderDataTable({datatable({websites})}) 
} 

shinyApp(ui=ui, server=server) 

アップデート:Ryan Mortonからの提案された投稿に基づいて、私はコードを修正しようとしました。私の問題は、ユーザーが作成したcreateLink関数内に含まれるsprintf関数になりました。リンクボタンが表示されますが、目的の場所には移動しません。

#app.R# 

library(shiny) 

web_names <- c("google", "yahoo", "Stack Overflow", "Random Google Search") 
url <- c("https://www.google.com/", "https://www.yahoo.com/", "https://stackoverflow.com/", "https://www.google.com/search?q=random+google+search&oq=random+google+search&aqs=chrome..69i57j0l5.3264j0j7&sourceid=chrome&ie=UTF-8") 
websites <- data.frame(web_names, url) 
createLink <- function(val) { 
    sprintf('<a href="" target="_blank" class="btn btn-primary">Info</a>', val) 
} 

websites$url_link <- createLink(websites$url) 

ui <- fluidPage( 
    titlePanel("Table with Links!"), 
    sidebarLayout(
    sidebarPanel(
     h4("Click the link in the table to go to the url listed.") 
    ), 
    mainPanel(
     dataTableOutput('table1') 
    ) 
) 
) 

server <- function(input, output) { 

    output$table1 <- renderDataTable({ datatable({websites}) 
    return(websites) 

    }, escape = FALSE) 
} 

shinyApp(ui, server) 
+0

これは似ています:https://stackoverflow.com/questions/28117556/clickable-links-in-shiny-datatable –

+0

@RyanMortonそれは近くにあり、長いURLで私の問題を解決するリンクとしてボタンを持っている。リンクがsprintf関数を使用して作成されたように見えますが、関数ドキュメントからの最初の研究では、リンクで使用されるテキストを書式設定する単なる方法です。私はそれがリンクを作成するhref関数だと信じていますが、それは現在の文字列である既存のWebアドレスをとってhrefを使ってその答えを適応させ、それをハイパーリンクにしています。 – User247365

答えて

1

少し提供されているコードを調整し、それが所望の出力が得られるはずです:だからあなたはpaste0()substr()と一緒にあなたのリンクを貼り付けることができ<a href="LINK", otherOptions,...> Linktext </a>

createLink <- function(val) { 
    sprintf(paste0('<a href="', URLdecode(val),'" target="_blank">', substr(val, 1, 25) ,'</a>')) 
} 
websites$url <- createLink(websites$url) 

HTMLは次のように動作します。

+0

これは美しく動作します!最初の25文字を表示する代わりに、Ryan Mortonがコメントに投稿したポストのようなボタンが作成されるという方法はありますか? – User247365

+0

あなたは今、両方のアプローチをしており、あなたが今 'ifelse()'がどのように動作しているのか推測しています;) – BigDataScientist

関連する問題