R:subset()为等效的逻辑表达式返回不同的结果

时间:2012-06-05 02:11:22

标签: r subset

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

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)

但我很好奇为什么前两个子集不会产生相同的结果!想法?思考? Pontifications?

1 个答案:

答案 0 :(得分:4)

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