如何在 for 循环内的名称-值对中指定名称?
How can I specify the name in a name-value pair inside a for loop?
我有这个示例脚本:
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
,然后终止并显示错误 Error: Column name already exists
。
我得到的:
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
我们可以在 lhs 上使用赋值运算符 (:=
) 和 name
求值 (!!
) 来将占位符的值设置为列名
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
我有这个示例脚本:
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
,然后终止并显示错误 Error: Column name already exists
。
我得到的:
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
我们可以在 lhs 上使用赋值运算符 (:=
) 和 name
求值 (!!
) 来将占位符的值设置为列名
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