在为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?
答案 0 :(得分:4)
因为在subset
的调用中,符号ttl.stims
在dat
的环境中被解释,所以它变为(解释后)dat$ttl.stims
。我预测第二次调用子集会返回整个数据帧。