Как я могу указать имя в паре имя-значение внутри цикла for? - PullRequest
0 голосов
/ 22 января 2019

У меня есть пример сценария:

library(tidyverse)

placeholder <- c("foo", "bar", "baz", "bash")

x <- 1
for (name in placeholder) {
    iris <- iris %>% add_column(name = rep("example", nrow(iris)),
                                .after = x)
    x <- x + 2

}

Что я хотел бы сделать, это вставить столбец после каждой характеристики цветка, с именами столбцов из элементов в placeholder.

Ожидаемый результат:

  Sepal.Length     foo Sepal.Width     bar Petal.Length     baz Petal.Width    bash Species
1          5.1 example         3.5 example          1.4 example         0.2 example  setosa
2          4.9 example         3.0 example          1.4 example         0.2 example  setosa
3          4.7 example         3.2 example          1.3 example         0.2 example  setosa
4          4.6 example         3.1 example          1.5 example         0.2 example  setosa
5          5.0 example         3.6 example          1.4 example         0.2 example  setosa
6          5.4 example         3.9 example          1.7 example         0.4 example  setosa

Однако цикл for помечает первый столбец в цикле for name, а затем завершается с ошибкой: 1011 *.

Что я получаю:

  Sepal.Length    name Sepal.Width Petal.Length Petal.Width Species
1          5.1 example         3.5          1.4         0.2  setosa
2          4.9 example         3.0          1.4         0.2  setosa
3          4.7 example         3.2          1.3         0.2  setosa
4          4.6 example         3.1          1.5         0.2  setosa
5          5.0 example         3.6          1.4         0.2  setosa
6          5.4 example         3.9          1.7         0.4  setosa

1 Ответ

0 голосов
/ 22 января 2019

Мы можем использовать оператор присваивания (:=) с оценкой name (!!) на lhs для установки значений заполнителя в качестве имен столбцов

x <- 1
for (name in placeholder) {
    iris <- iris %>% add_column(!! name := rep("example", nrow(iris)),
                            .after = x)
     x <- x + 2

 }
head(iris)
#  Sepal.Length     foo Sepal.Width     bar Petal.Length     baz Petal.Width    bash Species
#1          5.1 example         3.5 example          1.4 example         0.2 example  setosa
#2          4.9 example         3.0 example          1.4 example         0.2 example  setosa
#3          4.7 example         3.2 example          1.3 example         0.2 example  setosa
#4          4.6 example         3.1 example          1.5 example         0.2 example  setosa
#5          5.0 example         3.6 example          1.4 example         0.2 example  setosa
#6          5.4 example         3.9 example          1.7 example         0.4 example  setosa
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...