使用数据框列的名称创建公式
Create formula using the name of a data frame column
给定一个 data.frame
,我想(动态地)创建一个公式 y ~ .
,其中 y
是 data.frame
第一列的名称。
除了 as.formula(paste(names(df)[1], "~ ."))
的方法之外,更复杂的是列的名称可能是一个函数,例如:
names(model.frame(lm(I(Sepal.Length/Sepal.Width) ~ Species, data = iris)))[1]
是 "I(Sepal.Length/Sepal.Width)"
所以我需要引用列名,即在上面的示例中我希望公式为 `I(Sepal.Length/Sepal.Width)` ~ .
.
这个有效:
df <- model.frame(lm(I(Sepal.Length/Sepal.Width) ~ Species, data = iris))
fm <- . ~ .
fm[[2]] <- as.name(names(df)[1])
但是有一种巧妙的方法可以一步完成吗?
我们可以使用 reformulate
reformulate(".", response = sprintf("`%s`", names(df)[1]))
给定一个 data.frame
,我想(动态地)创建一个公式 y ~ .
,其中 y
是 data.frame
第一列的名称。
除了 as.formula(paste(names(df)[1], "~ ."))
的方法之外,更复杂的是列的名称可能是一个函数,例如:
names(model.frame(lm(I(Sepal.Length/Sepal.Width) ~ Species, data = iris)))[1]
是 "I(Sepal.Length/Sepal.Width)"
所以我需要引用列名,即在上面的示例中我希望公式为 `I(Sepal.Length/Sepal.Width)` ~ .
.
这个有效:
df <- model.frame(lm(I(Sepal.Length/Sepal.Width) ~ Species, data = iris))
fm <- . ~ .
fm[[2]] <- as.name(names(df)[1])
但是有一种巧妙的方法可以一步完成吗?
我们可以使用 reformulate
reformulate(".", response = sprintf("`%s`", names(df)[1]))