Как сгенерировать массив языковых объектов в R?

Я хочу хранить отформатированные тексты легенд в массиве.

normFactor= c(1e-1, 1e-2, 1e-3)

legend_text[1] = bquote(mu ~ "=" ~ .(normFactor[1]))
legend_text[2] = bquote(mu ~ "=" ~ .(normFactor[2]))
legend_text[3] = bquote(mu ~ "=" ~ .(normFactor[3]))

Вывод bquote имеет тип language:

str(bquote(mu ~ "=" ~ .(normFactor[3])))

язык мю ~ "=" ~ 0,001

Поэтому я подумал, что могу настроить массив языковых элементов:

legend_text = language()

К сожалению, это не работает, и мне интересно, как я могу хранить эти элементы в массиве...


person R_User    schedule 07.03.2013    source источник


Ответы (2)


язык не является атомарным типом данных, поэтому результатом будет список, а не вектор. Здесь вам поможет динамическая типизация:

legend_text<- c(
 bquote(mu ~ "=" ~ .(normFactor[1])),
 bquote(mu ~ "=" ~ .(normFactor[2])),
 bquote(mu ~ "=" ~ .(normFactor[3]))
)

Я не знаю, действительно ли это то, что вам нужно для вашей легенды.

person user2144547    schedule 07.03.2013
comment
Это работает, если вы окружаете bquotes с помощью as.expression. См.: stackoverflow.com/questions/15288900/ - person R_User; 08.03.2013

Вы можете сохранить их в виде списка или, что еще лучше, создать их следующим образом:

lapply(seq_along(normFactor),
         function(i)bquote(mu ~ "=" ~ .(normFactor[i])))

[[1]]
mu ~ "=" ~ 0.1

[[2]]
mu ~ "=" ~ 0.01

[[3]]
mu ~ "=" ~ 0.001

bquote создание языкового объекта может фактически быть преобразовано в списки и из списков с помощью as.list и as.call. Таким образом, решение выше может быть изменено, например:

> ll <- lapply(seq_along(normFactor),
+        function(i)as.list(bquote(mu ~ "=" ~ .(normFactor[i]))))
> str(ll)
List of 3
 $ :List of 3
  ..$ : symbol ~
  ..$ : language mu ~ "="
  ..$ : num 0.1
 $ :List of 3
  ..$ : symbol ~
  ..$ : language mu ~ "="
  ..$ : num 0.01
 $ :List of 3
  ..$ : symbol ~
  ..$ : language mu ~ "="
  ..$ : num 0.001

Затем приведение результата к списку вызовов:

> lapply(ll,as.call)
[[1]]
mu ~ "=" ~ 0.1

[[2]]
mu ~ "=" ~ 0.01

[[3]]
mu ~ "=" ~ 0.001
person agstudy    schedule 07.03.2013