最近,我对以下事实感到惊讶,is.logical
并且is.factor
无法开箱即用apply
——至少他们没有提供正确的结果。
这是我的小可复制示例:
# generate a dataset that contains a couple of modes
someDf <- data.frame(fac1=gl(2,3,12),
int=1:12,
char=letters[1:12],
logi=rep(c(T,F),6),
fac2=gl(3,2,12))
# hooray, this did work, got factors, int,
# characters and logical
str(someDf)
# I expected this to work, but it didn't
# everything is just FALSE
apply(someDf,2,is.logical)
我没有放弃,并找到了一个偷偷摸摸的方法。
unlist(lapply(names(someDf),function(x) is.logical(someDf[,x])))
虽然这提供了正确的结果,但我想知道为什么它必须如此复杂,以及是否有更简单的解决方案。有任何想法吗?
提示:我已经看到了
apply(someDf,2,class)
提供所有characters
。这也是意料之外的。也许有些东西eval
可以解决我找不到的窍门。