避免 JSON 在 Plotly (R) 中显示日文字符串时出错 / 运行 一个函数一次处理一个变量

Avoiding JSON error displaying Japanese strings within Plotly (R) / Running a function on one variable at a time

我是 R 的新手,总体上处于编程的初学者水平,并且试图弄清楚如何在 plotly 中获取 hovertext 以从我的数据框中显示日文字符串。通过 character encoding hell 冒险之后,我的大部分工作都解决了,但我卡在了一个点上:让日文字符串显示在最终情节中。

plot_ly(df, x = ~cost, y = ~grossSales, type = "scatter", mode = "markers",
    hoverinfo = "text",
    text = ~paste0("Product name: ", productName,
                    "<br>Gross: ", grossSales, "<br> Cost: ", cost, 
                    )
    ) 

我遇到的问题是使用'productName' returns dataframe中的日语字符串,导致绘图无法渲染。 DOM Inspector 的控制台显示 JSON 遇到字符串问题(即使它只是以 UTF-8 编码)。

使用 JSON(productName),我能够呈现 table,但是这会呈现带有 productName 列的完整信息的悬停文本框(例如,["","Product1"、"Product2"、"Product3"...])。我只想要那个特定产品的名称;就像 'grossSales' 和 'cost' 一样,只有 return 一个特定于该产品在图上每个点的数据。

有没有一种方法可以仅在 'productName' 的每个特定实例上执行 toJSON()? (即,输出应该是 "Product1" 和 JSON 友好的字符串格式)或者,有没有一种方法可以让我有计划地读取列表输出并且 select 只有正确的产品名称?

抛开问题继续研究其他东西,我找到了使用 for 循环的部分解决方案:

productNames <- NULL
for (i in 1:nrow(df))
{
    productNames <- c(productNames, toJSON(df[i, "productName"]))
}
df$jsonProductNames <- productNames

在 plotly 中使用 jsonProductNames 变量,图表只呈现并显示每个产品的名称!剩下的唯一问题是它在每个产品名称周围显示为 JSON [""] 格式。

更新:

我终于让这个完全按照我想要的方式工作了。我想有更优雅的解决方案,如果可能的话,我仍然有兴趣学习如何实现我最初想要的东西(运行 R 中变量的函数,每次在循环中遇到它),但这是我的工作方式:

colToJSON <- function(df, colStr)
{
    JSONCol <- NULL
    for (i in 1:nrow(df))
    {
        JSONCol <- c(JSONCol, toJSON(df[i, colStr]))
    }
    JSONCol <- gsub("\[\"", "", JSONCol)
    JSONCol <- gsub("\"\]", "", JSONCol)
    return(JSONCol)
}

df$jsonProductNames <- colToJSON(df, "productName")