在研究范围内,我总是使用“ with”而不是“ inner”,但是我最初认为它们是相同的。刚才我将“ with”错误地键入了“ within”,返回的结果却大不相同。我想知道为什么?
我正在使用plyr
包装中的棒球数据,因此我首先通过
require(plyr)
然后,我想选择ID为“ ansonca01 ”的所有行。首先,正如我所说的,我使用“ inside ”,并按如下方式运行该函数:
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和inside的文档,并得到以下信息:
with是一个通用函数,用于在由数据构造的本地环境中评估expr。该环境将调用者的环境作为其父项。这对于简化对建模函数的调用很有用。(注意:如果数据已经是环境,则将其与其现有父级一起使用。)
请注意,expr中的分配发生在构造的环境中,而不是在用户的工作空间中。
除了在expr评估后检查环境并对数据进行相应的修改(如果创建的对象无法存储在数据帧中而在数据帧中失败)之后,它与之相似。可以用作转换的替代方法。
从这些差异的解释中,我不明白为什么我会通过如此简单的操作获得不同的结果。有人有想法吗?
该文档非常清楚其语义和返回值(并且很好地匹配了“ with”和“ within”一词的日常含义):
值:
对于“
with
”,是评估后的“expr
”的值。对于'within
',修改后的对象。
由于您的代码baseball
未修改其中的任何内容,因此baseball
将返回未修改的内容。with
另一方面,不返回对象,而是返回expr
。
这是expr
ession修改对象的示例:
> head(within(cars, speed[dist < 20] <- 1))
speed dist
1 1 2
2 1 10
3 1 4
4 7 22
5 1 16
6 1 10
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句