Функция R bquote () не имеет того же количества элементов, что и выражение () - PullRequest
0 голосов
/ 13 июля 2020

Допустим, у меня есть такой вектор символов

vec <- c("a","b","c","d")

И я хочу изменить первый элемент вектора выражением

num <- 3
vec[1] <- expression(num^4)

Однако, если я попытаюсь используйте x[1] для метки на графике

plot(x=1, xlab = vec[1])

Я получаю следующую метку: Plot

Есть ли способ, которым метка может читать 3 4 ? Я провел небольшое исследование и увидел, что некоторые люди предлагают использовать функцию bquote(). Но когда я пробую это

num <- 3
vec[1] <- bquote(.(num)^4)

, я получаю сообщение об ошибке

количество заменяемых элементов не кратно длине замены

Is есть ли способ сделать так, чтобы bquote(.(num)^4) возвращал один элемент, как в случае с функцией expression()? Или есть какая-нибудь другая функция, которую я мог бы использовать, которая была бы эквивалентом expression(), но которая может читать переменные?

Заранее спасибо!

1 Ответ

0 голосов
/ 13 июля 2020

Вы не можете смешивать символы и выражения в векторе. Обратите внимание, что ваш первый фрагмент кода преобразовал все vec в контейнер выражения. Наблюдайте

vec <- c("a","b","c","d")
class(vec)
# [1] "character"
vec[1] <- expression(num^4)
class(vec)
# [1] "expression"
vec
# expression(num^4, "b", "c", "d")

Когда вы пытаетесь выполнить несовместимое присвоение, оно переводится в объект контейнера выражения.

В контейнерах выражений, как и в списках, вам нужно использовать двойные скобки [[ ]] для установки значений. Вы можете сделать

vec <- as.expression(c("a","b","c","d"))
num <- 3
vec[[1]] <- bquote(.(num)^4)
vec
# expression(3^4, "b", "c", "d")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...