Использование ggplot2 внутри функции R - PullRequest
0 голосов
/ 09 декабря 2018

Я хочу написать функцию R, которая читает файл m и строит диаграмму с помощью ggplots2.

Это функция:

stringplotter = function(m, n) {
library(ggplot2)
require(scales)
data<-as.data.frame(read.table(file=m, header=T, dec=".", sep="\t"))
ggplot(data, aes(x=string, y=n)) + geom_boxplot() + geom_point() + scale_y_continuous(labels=comma)
}

Anфайл примера test:

C   string
97  ccc
95.2    ccc
88.6    nnn
0.5 aaa
86.4    nnn
0   ccc
85  nnn
73.9    nnn
87.9    ccc
71.7    nnn
94  aaa
76.6    ccc
44.4    ccc
92  aaa
91.2    ccc

Когда я тогда вызываю функцию

stringplotter("test", C)

, я получаю ошибку

Fehler: Column `y` must be a 1d atomic vector or a list
Call `rlang::last_error()` to see a backtrace

Когда я вызываю команды внутриработать напрямую, все работает как положено.Где моя ошибка?

1 Ответ

0 голосов
/ 09 декабря 2018

Проблема в том, что когда вы пишете y = n, ggplot2 не знает, как оценить значение n.Вы можете использовать rlang, чтобы процитировать ввод, и он будет оценен в рамках введенного кадра данных-

stringplotter <- function(m, n) {
  library(ggplot2)
  require(scales)
  data <-
    as.data.frame(read.table(
      file = m,
      header = T,
      dec = ".",
      sep = "\t"
    ))
  ggplot(data, aes(x = string, y = !!rlang::enquo(n))) + 
    geom_boxplot() + 
    geom_point() + 
    scale_y_continuous(labels = comma)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...