闪亮数据表中的操作按钮按行具有不同的单击 URL

Jac*_*sox 1 datatable r shiny action-button

我正在尝试在闪亮的数据表中创建一个操作按钮,单击该按钮会链接到特定的亚马逊产品。我按照R Shiny: Handle Action Buttons in Data Table建模了我的代码。单击该按钮时,我需要用户根据 data.table 行中的 ASIN 导航到特定的亚马逊产品页面。

  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)
Run Code Online (Sandbox Code Playgroud)

问题是每个按钮最终都会有相同的 URL,仅选取第一个 ASIN 值。我希望 ASIN 值是该行的 ASIN 值中的值。

https://www.amazon.com/gp/product/B06Y4VRZTB/ref=as_li_tl?ie=UTF8&amp;tag=my0000-00&#39;
Run Code Online (Sandbox Code Playgroud)

我尝试为每一行创建按钮,但出现其他错误,例如“警告:mutate_impl 中的错误:列的Amazon.Button长度必须为 5(行数)或 1,而不是 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)
Run Code Online (Sandbox Code Playgroud)

包含链接名称和 ASIN 的表格

tho*_*hal 5

问题是由于您尝试将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()
      )
   )
Run Code Online (Sandbox Code Playgroud)