【问题标题】:"abline" doesn't work after "plot" when inside "with"在“with”内部时“plot”后“abline”不起作用
【发布时间】:2010-11-29 20:40:56
【问题描述】:

我想创建一个散点图并为数据集的子集绘制回归线。为了给出一个可重现的例子,我将使用 CO2 数据集。

我试过了,但由于某种原因没有出现回归线

with(subset(CO2,Type=="Quebec"),plot(conc,uptake),abline(lm(uptake~conc)))

发出这样的命令的正确方法是什么?我可以用单线做吗?

【问题讨论】:

    标签: r plot


    【解决方案1】:

    您需要将两行代码作为单个 R 表达式提供。 abline() 被作为with() 的后续参数,这是... 参数。这被记录为一种将参数传递给未来方法的方法,但最终结果是它实际上是这部分代码的黑洞。

    两个选项,i) 保留一行,但将表达式包装在 {} 中,并用 ; 分隔两个表达式:

    with(subset(CO2,Type=="Quebec"), {plot(conc,uptake); abline(lm(uptake~conc))})
    

    或者将表达式分成两行,仍然包裹在{}中:

    with(subset(CO2,Type=="Quebec"), 
         {plot(conc,uptake)
          abline(lm(uptake~conc))})
    

    编辑:老实说,如果你正在做这样的事情,你就会错过通过 R 的模型公式进行子集化的优势。我会这样做:

    plot(uptake ~ conc, data = CO2, subset = Type == "Quebec")
    abline(lm(uptake ~ conc, data = CO2, subset = Type == "Quebec"), col = "red")
    

    with() 只是让你用大括号和; 混淆你的代码。

    【讨论】:

    • 您的“编辑”中有很棒的建议。到目前为止,这是正确的方法。
    • 只是我不喜欢多次给出一组限制。这可能很危险。
    【解决方案2】:

    来自?withwith ... 在使用data 创建的本地环境中评估expr。您通过... 传递abline()。你需要做这样的事情:

    with(subset(CO2,Type=="Quebec"),{plot(conc,uptake);abline(lm(uptake~conc))})
    

    【讨论】:

      【解决方案3】:

      Gavin 和 Joshua 为您眼前的问题提供了很好的解决方案;这是使用 ggplot 的等效图:

      library(ggplot2)
      qplot(conc, uptake, data = CO2[CO2$Type == "Quebec" , ]) + stat_smooth(method = "lm", se = FALSE)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-09-02
        • 2014-02-22
        • 2018-11-04
        • 1970-01-01
        • 2020-05-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多