actionButton в Shiny DataTable с другим URL-адресом при нажатии по строке

Я пытаюсь создать кнопку действия в Shiny DataTable, которая при нажатии ссылается на конкретный продукт Amazon. Я смоделировал свой код после R Shiny: обрабатывать кнопки действий в таблице данных. Когда кнопка нажата, мне нужно, чтобы пользователь перешел на определенную страницу продукта Amazon на основе ASIN в строке data.table.

  filteredData <- data.frame(
    Name = c('Dilbert', 'Alice', 'Wally', 'Ashok', 'Dogbert'),
    ASIN = c("B06Y4VRZTB",
             "B06Y4WGPBB",
             "B06Y4J9Z9V",
             "B06Y4V169H",
             "B06Y4TF1D1"),
    stringsAsFactors = FALSE,
    row.names = 1:5)

  shinyInput <- function(FUN, len, id, ...) {
    inputs <- character(len)
    for (i in seq_len(len)) {
      inputs[i] <- as.character(FUN(paste0(id, i), ...))
    }
    print(inputs)
    inputs
  }

  df <- reactiveValues(data = data.frame(
      filteredData %>% mutate(Amazon.Button = shinyInput(actionButton,
                                               nrow(filteredData),
                                               'button_',
                                               label = "Amazon",
                                               onclick = paste0("window.open('https://",
                                                                AmazonSiteLink,
                                                                "/gp/product/",
                                                                ASIN,
                                                                "/ref=as_li_tl?ie=UTF8&tag=",
                                                                AssociateTag, "')")))
  ), escape=FALSE)

Проблема в том, что каждая кнопка заканчивается одним и тем же URL-адресом, выбирая только первое значение ASIN. Я хочу, чтобы значение ASIN соответствовало значению ASIN для строки.

https://www.amazon.com/gp/product/B06Y4VRZTB/ref=as_li_tl?ie=UTF8&amp;tag=my0000-00&#39;

Я пытался создать кнопку с каждой строкой, но получаю другие ошибки, такие как «Предупреждение: ошибка в mutate_impl: столбец Amazon.Button должен иметь длину 5 (количество строк) или один, а не 3»

  df <- reactiveValues(data = data.frame(
      filteredData %>% mutate(Amazon.Button = actionButton(inputId = paste0('button'),
                                               label = "Amazon",
                                               onclick = paste0("window.open('https://",
                                                                AmazonSiteLink,
                                                                "/gp/product/",
                                                                ASIN,
                                                                "/ref=as_li_tl?ie=UTF8&tag=",
                                                                AssociateTag, "')")))
  ), escape=FALSE)

Таблица с именем и ASIN для ссылки


person Jacksonsox    schedule 09.04.2018    source источник


Ответы (1)


Проблема возникает из-за того, что вы пытаетесь передать R объект (список) (actionButton) в mutate. Список имеет длину 3, но mutate предполагает ту же длину, что и кадр данных. Что вы хотите, так это взять этот объект и преобразовать его в соответствующую строку. Поскольку вы в любом случае не используете реактивность Shiny's на этих кнопках, я бы рекомендовал создать HTML самостоятельно вместо использования actionButton (непроверено, поскольку вы не предоставили reprex ):

library(tidyverse)
filteredData %>% 
   mutate(Amazon.button = map_chr(ASIN,
      ~ tags$button(class = "btn btn-default",
                    type  = "button",
                    icon("amazon"),
                    "Amazon",
                    onclick = paste0("window.open('https://",
                                     AmazonSiteLink,
                                     "/gp/product/",
                                     .x,
                                     "/ref=as_li_tl?ie=UTF8&tag=",
                                     AssociateTag, 
                                     "')")
                    ) %>%
         as.character()
      )
   )
person thothal    schedule 28.08.2018
comment
Привет @thothal, я использовал твое решение, чтобы добавить кнопку, но значок не отображался. Я хотел бы показать кнопку со значком и без метки. Я понятия не имею, как справиться с этой проблемой. Любая помощь будет оценена. - person just_rookie; 07.11.2018