2

在为子集()编写便利函数时,我遇到了一种奇怪的情况,即使用等效的逻辑语句会返回不同的子集。因此,例如:

dat = data.frame(ttl.stims = c(4,4,8,8), change = c('big', 'small'))
dat
ttl.stims = 4

#logical statements are equivalent
dat$ttl.stims == 4
dat$ttl.stims == ttl.stims

#subset evaluates differently
subset(dat, dat$ttl.stims == 4)
subset(dat, dat$ttl.stims == ttl.stims)

我一直在通过以下方式解决这个问题:

index = dat$ttl.stims == ttl.stims
subset(dat, index)

但我很好奇为什么前两个子集不会产生相同的结果!想法?想法?冠冕堂皇?

4

1 回答 1

4

subset因为对符号的调用ttl.stims在 的环境中被解释dat,所以它变成(解释后) dat$ttl.stims。我预测对子集的第二次调用会返回整个数据帧。

于 2012-06-05T02:18:03.747 回答