«Аблайн» не работает после «заговора», когда внутри «с» - PullRequest
2 голосов
/ 29 ноября 2010

Я хочу создать график рассеяния и нарисовать линию регрессии для подмножества набора данных. Чтобы привести воспроизводимый пример, я буду использовать набор данных CO2.

Я пробовал это, но по какой-то причине линия регрессии не появляется

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

Как правильно дать команду, подобную этой? Могу ли я сделать это с помощью одной строки?

Ответы [ 3 ]

9 голосов
/ 29 ноября 2010

Вам необходимо предоставить обе строки кода в виде одного выражения 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() просто заставляет вас запутывать код с помощью фигурных скобок и ;.

3 голосов
/ 29 ноября 2010

From ?with: with ... оценивает expr в локальной среде, созданной с использованием data Вы передаете abline() через .... Вам нужно сделать что-то вроде этого:

with(subset(CO2,Type=="Quebec"),{plot(conc,uptake);abline(lm(uptake~conc))})
2 голосов
/ 29 ноября 2010

Гэвин и Джошуа предлагают хорошие решения вашей непосредственной проблемы;Вот эквивалентный график с использованием ggplot:

library(ggplot2)
qplot(conc, uptake, data = CO2[CO2$Type == "Quebec" , ]) + stat_smooth(method = "lm", se = FALSE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...