在“with”内部“情节”之后“abline”不起作用

时间:2010-11-29 20:40:56

标签: r plot

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

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

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

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

3 个答案:

答案 0 :(得分:9)

您需要将两行代码作为单个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()只会让您使用大括号和;对代码进行模糊处理。

答案 1 :(得分:3)

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

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

答案 2 :(得分:2)

加文和约书亚为你眼前的问题提供了很好的解决方案;这是使用ggplot的等效图:

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