我想为函数提供一个与公式右侧对应的字符串,然后将该字符串转换为公式列表,其中data.frame的列名是公式的左侧值。为此,我使用以下结构:
form <- "a + b + c + d"
t <- matrix(runif(20),nrow=10,ncol=2)
colnames(t) <- c("col1","col2")
form.new2 <- lapply(colnames(t),function(x) as.formula(paste(x,sep="~",form)))
form.new2
对我来说,这会返回:
[[1]]
col1 ~ a + b + c + d
<environment: 0x000000001c0809c8>
[[2]]
col2 ~ a + b + c + d
<environment: 0x000000001c07d350>
代码接近我的预期,但我不知道这些标签是什么,因为我以前从未遇到过它们。我想我可以用stringr或类似的东西摆脱它们,但是1.如果我不需要,我宁愿不要把这个功能弄得更混乱,而且我很好奇这些是什么以及它们来自哪里从。有没有人有任何建议?
答案 0 :(得分:1)
那些标签并不存在。请注意,当您打印变量值时,R选择显示的内容不一定与变量实际包含的内容相同。在这种情况下,get的运行是stats:::print.formula()
但是,所有公式都会跟踪它们在哪个环境中创建。如果该环境是全局环境,则“标记”不会显示。
如果要将环境设置为全局环境(以获取“默认”行为),请使用
my_formula <- function(x) as.formula(paste(x,sep="~",form), env=globalenv())
form.new2 <- lapply(colnames(t), my_formula)
form.new2
# [[1]]
# col1 ~ a + b + c + d
#
# [[2]]
# col2 ~ a + b + c + d