【问题标题】:Use of ~ (tilde) in R programming Language在 R 编程语言中使用 ~(波浪号)
【发布时间】:2013-02-05 05:54:56
【问题描述】:

我在一个关于回归建模的教程中看到了以下命令:

myFormula <- Species ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width

这个命令具体是做什么的,~(波浪号)在命令中的作用是什么?

【问题讨论】:

  • 愿意分享教程的链接吗?听起来很有趣。
  • @cheeesus...我正在阅读 R 中的电子书数据挖掘和案例研究...在那里你可以找到更多这样有趣的例子。

标签: r r-faq r-formula


【解决方案1】:

一句话,

The tilde(~) separates the left side of a formula with the right side of the formula.

例如,在线性函数中,它将因变量与自变量分开,可以解释为“作为函数”。因此,当一个人的工资(工资)作为其受教育年限(years_of_education)的函数时,我们会这样做,

wages ~ years_of_education

这里,

 Species ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width

这意味着,SpeciesSepal Length, Sepal Width, Petal Length and Petal Width 的一个函数。

【讨论】:

    【解决方案2】:

    R 定义了一个~(波浪号)运算符以用于公式。公式有各种各样的用途,但也许最常见的是回归:

    library(datasets)
    lm( myFormula, data=iris)
    

    help("~")help("formula") 会教你更多。

    @Spacedman 涵盖了基础知识。让我们讨论一下它是如何工作的。

    首先,作为一个运算符,请注意它本质上是一个函数的快捷方式(带有两个参数):

    > `~`(lhs,rhs)
    lhs ~ rhs
    > lhs ~ rhs
    lhs ~ rhs
    

    这可能有助于了解在例如apply 家庭命令。

    其次,您可以将公式作为文本进行操作:

    oldform <- as.character(myFormula) # Get components
    myFormula <- as.formula( paste( oldform[2], "Sepal.Length", sep="~" ) )
    

    第三,您可以将其作为列表进行操作:

    myFormula[[2]]
    myFormula[[3]]
    

    最后,还有一些有用的公式技巧(请参阅help("formula") 了解更多信息):

    myFormula <- Species ~ . 
    

    例如,上面的版本与原始版本相同,因为点表示“所有尚未使用的变量”。这会查看您在最终模型调用中使用的 data.frame,查看 data.frame 中存在哪些变量但您的公式中没有明确提及,并用那些缺失的变量替换点。

    【讨论】:

    • 感谢@Ari B. Friedman 的回答,但最后一行有点模棱两可,您说“点表示“所有变量尚未使用”。如果你能进一步说明它。
    • @Ankita,在此上下文中“尚未使用”意味着未提及。在Species~. 中,species 是唯一使用的变量。因此,它取决于 data.frame 中的所有其他变量。
    • 我不明白myFormula &lt;- Species ~ . 。当 dot 仍被 data.frame 中的变量替换时?你能举个例子吗
    【解决方案3】:

    &lt;- 右边的东西是一个formula 对象。它通常用于表示统计模型,其中~ 左边的东西是响应,~ 右边的东西是解释变量。所以在英语中你会说类似“物种取决于萼片长度、萼片宽度、花瓣长度和花瓣宽度”

    该行的myFormula &lt;- 部分将公式存储在一个名为myFormula 的对象中,因此您可以在R 代码的其他部分中使用它。


    R中公式对象的其他常见用途

    lattice 包将它们用于specify the variables to plot
    ggplot2 包将它们用于specify panels for plotting
    dplyr 包将它们用于non-standard evaulation

    【讨论】:

    猜你喜欢
    • 2019-04-09
    • 2020-10-10
    • 2019-05-17
    • 1970-01-01
    • 2016-03-27
    • 2020-05-08
    • 1970-01-01
    • 2011-03-05
    • 2019-07-07
    相关资源
    最近更新 更多