Винаги използвам с вместо в контекста на моето изследване, но първоначално мислех, че са еднакви. Току що въвеждам грешка с for within и върнатите резултати са доста различни. Чудя се защо?
Използвам бейзболните данни в пакета plyr
, така че първо зареждам библиотеката от
require(plyr)
След това искам да избера всички редове с идентификатор ansonca01. Отначало, както казах, използвах в и стартирах функцията, както следва:
within(baseball, baseball[id=="ansonca01", ])
Получих много странни резултати, които основно включват всичко:
id year stint team lg g ab r h X2b X3b hr rbi sb cs bb so ibb hbp sh sf gidp
4 ansonca01 1871 1 RC1 25 120 29 39 11 3 0 16 6 2 2 1 NA NA NA NA NA
44 forceda01 1871 1 WS3 32 162 45 45 9 4 0 29 8 0 4 0 NA NA NA NA NA
68 mathebo01 1871 1 FW1 19 89 15 24 3 1 0 10 2 1 2 0 NA NA NA NA NA
99 startjo01 1871 1 NY2 33 161 35 58 5 1 1 34 4 2 3 0 NA NA NA NA NA
102 suttoez01 1871 1 CL1 29 128 35 45 3 7 3 23 3 1 1 0 NA NA NA NA NA
106 whitede01 1871 1 CL1 29 146 40 47 6 5 1 21 2 2 4 1 NA NA NA NA NA
113 yorkto01 1871 1 TRO 29 145 36 37 5 7 2 23 2 2 9 1 NA NA NA NA NA
.........
Тогава използвам с вместо в,
with(baseball, baseball[id=="ansonca01",])
и получих резултатите, които очаквах
id year stint team lg g ab r h X2b X3b hr rbi sb cs bb so ibb hbp sh sf gidp
4 ansonca01 1871 1 RC1 25 120 29 39 11 3 0 16 6 2 2 1 NA NA NA NA NA
121 ansonca01 1872 1 PH1 46 217 60 90 10 7 0 50 6 6 16 3 NA NA NA NA NA
276 ansonca01 1873 1 PH1 52 254 53 101 9 2 0 36 0 2 5 1 NA NA NA NA NA
398 ansonca01 1874 1 PH1 55 259 51 87 8 3 0 37 6 0 4 1 NA NA NA NA NA
525 ansonca01 1875 1 PH1 69 326 84 106 15 3 0 58 11 6 4 2 NA NA NA NA NA
Проверих документацията на с и в рамките, като написах help(with)
в R среда и получих следното:
with е обща функция, която оценява expr в локална среда, конструирана от данни. Средата има средата на повикващия като родител. Това е полезно за опростяване на извикванията на функции за моделиране. (Забележка: ако данните вече са среда, това се използва със съществуващия родител.)
Обърнете внимание, че присвояванията в рамките на expr се извършват в изградената среда, а не в работното пространство на потребителя.
в рамките е подобно, с изключение на това, че изследва средата след оценката на expr и прави съответните модификации на данните (това може да се провали в случай на рамка с данни, ако са създадени обекти, които не могат да бъдат съхранени в рамка с данни), и го връща. в рамките на може да се използва като алтернатива на трансформация.
От това обяснение на разликите не разбирам защо получих различни резултати с толкова проста операция. Някой има ли идеи?
with
в израз като:with(baseball,baseball[id=="ansonca01",])
? Трябва ви самоbaseball[baseball$id=="ansonca01",]
. - person Thomas   schedule 17.02.2014within
връща пълната рамка с данни. Правенето на извличане вътре вwithin
всъщност няма никакъв смисъл. Опитайте да създадете нова променлива вътре вwith
и вътре вwithin
и ще видите разликата по-ясно. - person Thomas   schedule 17.02.2014summarise
иmutate
. - person baptiste   schedule 17.02.2014dplyr
братовчеди. - person baptiste   schedule 17.02.2014subset(baseball, id=="ansonca01")
- person baptiste   schedule 17.02.2014