当您使用语言元素时,一些规则会发生变化。您显然想要一两个字符列来标记您的结果,但是您在第一个“mof”对象中构造的是一个字符向量,其中只有模型的名称,而不是模型本身。
> str(mof)
'data.frame': 3 obs. of 1 variable:
$ V1: chr "m01" "m02" "m03"
要使用字符向量从工作区检索模型,您需要使用get
. 然后,它们将可用于使用功能formula
和进行进一步处理as.character
。然后您需要在最后“返回”到字符模式,因为类公式的对象不是有效的数据框组件。多合一的嵌套调用将是:
> forms.mat <- sapply( lapply( lapply(mof$V1, get) , formula), as.character)
> forms.mat
[,1] [,2] [,3]
[1,] "~" "~" "~"
[2,] "g" "g" "g"
[3,] "ab + I(r^2) + cos(pi * h)" "I(ab^3) + r + cos(pi * h) + sin(pi * h)" "ab + r"
您可以重新排列(以使波浪号重新回到 LHS 和 RHS 表达式之间并粘贴在一起(使用 collapse=""):
> apply(forms.mat[ c(2,1,3),], 2, paste, collapse="")
[1] "g~ab + I(r^2) + cos(pi * h)" "g~I(ab^3) + r + cos(pi * h) + sin(pi * h)"
[3] "g~ab + r"
您可能通过使用列表来简化这一点:
> mof2 <- list(m01,m02,m03) # Skipping the search of the workspace and reconstitution
> lapply(mof2, formula)
[[1]]
g ~ ab + I(r^2) + cos(pi * h)
<environment: 0x2ef997c60>
[[2]]
g ~ I(ab^3) + r + cos(pi * h) + sin(pi * h)
<environment: 0x19fef52d0>
[[3]]
g ~ ab + r
<environment: 0x19fef68d8>
> sapply( lapply(mof2, formula), as.character )
[,1] [,2] [,3]
[1,] "~" "~" "~"
[2,] "g" "g" "g"
[3,] "ab + I(r^2) + cos(pi * h)" "I(ab^3) + r + cos(pi * h) + sin(pi * h)" "ab + r"