2010-11-29 94 views
2

我想创建散点图并为数据集的子集绘制回归线。为了给出一个可重复的例子,我将使用CO2数据集。“abline”在“plot”里面“with”时不起作用

我试过,但回归线不会出现由于某些原因

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

是什么让这样一个命令的正确方法是什么?我可以用一班吗?

回答

9

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

两个选项,我)保持一条线,但在{}包裹的表达和分离两个表达式与;

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()只是导致你用括号和;混淆您的代码:我将如下这样做。

+0

在你的“编辑”的真棒建议。这是迄今为止正确的方法。 – 2010-11-29 21:31:41

3

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

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

Gavin和Joshua为你眼前的问题提供了很好的解决方案;这里是使用ggplot的等价情节:

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