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&tag=my0000-00'
Я пытался создать кнопку для каждой строки, но получаю другие ошибки, например: "Предупреждение: Ошибка в 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)
1 ответ
Проблема возникает из-за того, что вы пытаетесь передать R
объект (список) (actionButton
) чтобы mutate
, Список имеет длину 3
но mutate
ожидает той же длины, что и датафрейм. Вам нужно взять этот объект и преобразовать его в соответствующую строку. Как вы в любом случае не используете Shiny's
реактивности на этих кнопках, я бы порекомендовал построить HTML
себя вместо того, чтобы использовать actionButton
(непроверенный, поскольку вы не предоставили предысторию):
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()
)
)