Shiny DataTable 中的 actionButton 具有不同的点击 URL by Row
actionButton in Shiny DataTable that has a Different on-click URL by Row
我正在尝试在 Shiny DataTable 中创建一个操作按钮,单击该按钮可链接到特定的亚马逊产品。我在 之后建模了我的代码。单击按钮后,我需要用户根据 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)
问题是每个按钮都以相同的 URL 结束,仅选取第一个 ASIN 值。我希望 ASIN 值是该行的 ASIN 值中的值。
https://www.amazon.com/gp/product/B06Y4VRZTB/ref=as_li_tl?ie=UTF8&tag=my0000-00'
我尝试为每一行创建按钮,但出现其他错误,例如 "Warning: Error in mutate_impl: Column Amazon.Button
must be length 5 (the number of rows) or one, not 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)
问题是由于您试图将 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()
)
)
我正在尝试在 Shiny DataTable 中创建一个操作按钮,单击该按钮可链接到特定的亚马逊产品。我在
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'
我尝试为每一行创建按钮,但出现其他错误,例如 "Warning: Error in mutate_impl: Column Amazon.Button
must be length 5 (the number of rows) or one, not 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)
问题是由于您试图将 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()
)
)