Понимание и восстановление перегрузки кадра данных в формат d3 - PullRequest
0 голосов
/ 30 марта 2020

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

https://shiny.rstudio.com/gallery/nvd3-line-chart-output.html

Основная проблема заключается в том, что ось X увеличенное число, определяемое количеством строк перегруженного информационного кадра (как показано в примере выше). Мне нужно иметь первый столбец данных в качестве моей оси X. Поэтому я хочу изменить код, фактическая цель состоит в том, чтобы заменить его функциями r2d3, доступными в R.

В этом примере я не понимаю следующих вещей: Как перегрузить фрейм данных в функцию с ментой, а затем диаграмма? Может кто-нибудь показать мне способ увидеть выходные данные функции преобразования, и заменить его вручную созданной строкой d3 для проверки?

Вызов функции:

output$mychart <- renderLineChart({
  df_stocking_catches
})

Функция, которую я не понимаю.

# To be called from server.R
renderLineChart <- function(expr, env=parent.frame(), quoted=FALSE) {
  # This piece of boilerplate converts the expression `expr` into a
  # function called `func`. It's needed for the RStudio IDE's built-in
  # debugger to work properly on the expression.
  installExprFunction(expr, "func", env, quoted)

  function() {
    dataframe <- func()

    mapply(function(col, name) {

      values <- mapply(function(val, i) {
        list(x = i, y = val)
      }, col, 1:nrow(dataframe), SIMPLIFY=FALSE, USE.NAMES=FALSE)

      list(key = name, values = values)

    }, dataframe, names(dataframe), SIMPLIFY=FALSE, USE.NAMES=FALSE)
  }
}

Спасибо за любые предложения. Sam

Ответы [ 2 ]

0 голосов
/ 03 апреля 2020

ура, понял! Это не красиво, но работает именно так, как я хотел. Использовали функцию отладки browser () и команду print () для пошагового анализа функции. Теперь я чувствую себя гениальным, чтобы решить самостоятельно, но все еще не понимаю этого дерьмового фрагмента кода.

renderLineChart <- function(expr, env=parent.frame(), quoted=FALSE) {
  installExprFunction(expr, "func", env, quoted)

  function() {
    dataframe <- func()

    mapply(function(col, name) {
      if(name!="Year"){
        values <- mapply(function(val, i) {
          list(x = dataframe[i,1], y = val)
          #browser()
          #print(dataframe[i,1])
        }, col, 1:nrow(dataframe), SIMPLIFY=FALSE, USE.NAMES=FALSE)
        list(key = name, values = values)

      }
    }, dataframe[,-1], names(dataframe[,-1]), SIMPLIFY=FALSE, USE.NAMES=FALSE)
  }
}

Надеюсь, что этот пост вдохновит кого-нибудь. Bye

0 голосов
/ 01 апреля 2020

Я нашел первый шаг решения, изменив индекс x = i на x = dataframe[i,1] Это изменение принимает первый столбец как значение x диаграммы

НО, первый столбец по-прежнему отображается как Строка в линейной диаграмме, которая не имеет смысла ... возможно, кто-нибудь знает, как изменить код, чтобы пропустить первый столбец как строковое значение.

Any iedeas?

renderLineChart <- function(expr, env=parent.frame(), quoted=FALSE) {
  # ...
  installExprFunction(expr, "func", env, quoted)

  function() {
    dataframe <- func()

    mapply(function(col, name) {
      print(name)
      values <- mapply(function(val, i) {
        list(x = dataframe[i,1], y = val)
      }, col, 1:nrow(dataframe), SIMPLIFY=FALSE, USE.NAMES=FALSE)
...
...