Правильно использовать кавычку для вызова переменной на основе значения - PullRequest
1 голос
/ 06 февраля 2020

Я пытаюсь понять, как использовать аргумент data$VARIABLE, когда я устанавливаю VARIABLE в качестве глобального значения.

Используя набор данных iris, я создаю два набора данных. (iris и iris2).

data(iris)
iris2 <- iris[,1:4]^2
colnames(iris2) <- c("col1", "col2", "col3", "col4")

Я хочу cbind указать несколько c столбцов вместе, например:

cbind(iris$Sepal.Length, iris2$col1, iris$Species)

Однако я хочу определить VARIABLE вне функции cbind.

Я пытаюсь

var1 <- quote(Sepal.Length)
var2 <- quote(col1)
var3 <- quote(Species)

cbind(iris$var1, iris2$var2, iris$var3)

Однако это не работает.

Как мне назначить переменная вне функции cbind?

Ответы [ 2 ]

2 голосов
/ 06 февраля 2020

[[ и setNames будут приняты символы:

setNames(data.frame(iris[[var1]], iris2[[var2]], iris[[var3]]), c(var1, var2, var3))

давая:

  Sepal.Length  col1 Species
1          5.1 26.01  setosa
2          4.9 24.01  setosa
3          4.7 22.09  setosa
4          4.6 21.16  setosa
5          5.0 25.00  setosa
6          5.4 29.16  setosa
...etc...
1 голос
/ 06 февраля 2020

Так как quote это symbol

str(var1)
#symbol Sepal.Length

, мы можем deparse/as.character преобразовать его в character и использовать [ вместо $

head(cbind(iris[deparse(var1)], iris2[deparse(var2)], iris[deparse(var3)]))
#  Sepal.Length  col1 Species
#1          5.1 26.01  setosa
#2          4.9 24.01  setosa
#3          4.7 22.09  setosa
#4          4.6 21.16  setosa
#5          5.0 25.00  setosa
#6          5.4 29.16  setosa

Или, если мы используем quo

library(dplyr)
var1 <- quo(Sepal.Length)
var2 <- quo(col1)
var3 <- quo(Species)
iris %>% 
     select(!!var1, !! var3) %>%
     # or use the curly-curly operator
     # select({{var1}}, {{var3}}) %>%
     bind_cols(iris2 %>% 
                  select(!! var2))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...