Предотвращение ошибок JSON при отображении японских строк в Plotly (R) / Запуск функции по одной переменной за раз - PullRequest
0 голосов
/ 31 января 2019

Я очень плохо знаком с R и начальным уровнем в программировании в целом, и пытаюсь выяснить, как получить ховертекст в графическом виде для отображения японской строки из моего фрейма данных.Пройдя сквозь адскую кодировку символов , у меня все в основном получилось, но я застрял в одной точке: заставить японскую строку отображаться в конечном графике.

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' возвращает японскую строку из фрейма данных, что приводит к сбою визуализации графика.Консоль DOM Inspector показывает JSON, сталкивающийся с проблемами со строкой (даже если она только что закодирована в UTF-8).

Используя toJSON (productName), я могу отобразить таблицу, однако при этом отображается текстовое поле при наведении курсора с полной информацией о столбце productName (например, ["", "Product1", "Product2", ""Product3" ...]).Я хочу только название этого конкретного продукта;точно так же, как «grossSales» и «стоимость» возвращают только данные, специфичные для этого продукта, в каждой точке графика.

Можно ли выполнить toJSON () только для каждого конкретного экземпляра productName?(т. е. выходные данные должны быть "Product1" с форматом строки JSON). Есть ли способ, которым я могу графически прочитать вывод списка и выбрать только правильное имя продукта?

1 Ответ

0 голосов
/ 31 января 2019

Отойдя от проблемы, чтобы продолжить изучение других вещей, я нашел частичное решение в использовании цикла for:

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

Используя переменную 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")
...