首页 > 解决方案 > 返回带有公式 (~) 波浪号和符号的命名列表的函数

问题描述

我正在尝试创建一个可以返回plotly平行坐标图尺寸的函数。简而言之,这个函数期望结构中的维度如下:

df %>%
  plot_ly(type = 'parcoords',
          line = list(color = "blue"),
          dimensions = list(
              list(values = ~ column_01),
              list(values = ~ column_02),
              list(values = ~ column_03)
              # etc...
            )
          )

例如,给定一个data.frame(例如iris),我想返回一个看起来像这样的列表结构:

# Desired results
list(
  list(values = ~ Sepal.Length),
  list(values = ~ Sepal.Width),
  list(values = ~ Petal.Length),
  list(values = ~ Petal.Width),
  list(values = ~ Species)
)

formula我很接近,但我在(~) 部分遇到了问题:

library(tidyverse)
get_dimensions <- function(df) {
  map(names(df), ~ list(values = rlang::sym(.)))
}

get_dimensions(iris) %>% str
# List of 5
#  $ :List of 1
#   ..$ values: symbol Sepal.Length
#  $ :List of 1
#   ..$ values: symbol Sepal.Width
#  $ :List of 1
#   ..$ values: symbol Petal.Length
#  $ :List of 1
#   ..$ values: symbol Petal.Width
#  $ :List of 1
#   ..$ values: symbol Species

或者,如果有人知道一种自动将data.frame 的所有列作为维度传递给 plotly parcoords 图的方法,请告知!

标签: rfunctionplotly

解决方案


I used call() to create the formula.

library(magritrr)
get_dimensions <- . %>%
    names() %>%
    lapply(as.name) %>%
    lapply(function (x) list(values = call("~", x)))

get_dimensions(iris)
# [[1]]
# [[1]]$values
# ~Sepal.Length
#
#
# [[2]]
# [[2]]$values
# ~Sepal.Width
# 
# 
# [[3]]
# [[3]]$values
# ~Petal.Length
# 
# 
# [[4]]
# [[4]]$values
# ~Petal.Width
# 
# 
# [[5]]
# [[5]]$values
# ~Species

推荐阅读