我想创建一个散点图并绘制数据集子集的回归线。为了给出一个可重复的例子,我将使用CO2数据集。
我试过了,但回归线因某种原因没有出现
with(subset(CO2,Type=="Quebec"),plot(conc,uptake),abline(lm(uptake~conc)))
给出这样的命令的正确方法是什么?我可以使用单线程吗?
答案 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)
来自?with
:with
...评估使用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)