在编写R代码以识别具有数字数据的列时,我遇到了一些问题并在SO上发现了这个问题: 是否有使用is.numeric的矢量化方法?
在那个页面中,我找到了答案,但我对问题本身的性质感到困惑.在该页面上,以下代码片段执行我期望的操作:
> dat <- data.frame(v1=1:5,v2=letters[1:5],v3=rnorm(5),v4=c(1,2,'c','d',5))
> sapply(dat,is.numeric)
v1 v2 v3 v4
TRUE FALSE TRUE FALSE
Run Code Online (Sandbox Code Playgroud)
但如果我改变申请,我会找到导致我问题的原因.
> dat <- data.frame(v1=1:5,v2=letters[1:5],v3=rnorm(5),v4=c(1,2,'c','d',5))
> apply(dat,2,is.numeric)
v1 v2 v3 v4
FALSE FALSE FALSE FALSE
Run Code Online (Sandbox Code Playgroud)
为什么申请和sapply导致不同的评估?
apply将所有内容强制转换为相同的类型.数字可以成为字符,但反之则不然.所以一切都被强制character适用于工作.
> apply(dat[,1, drop = F], 2, is.numeric)
v1
TRUE
Run Code Online (Sandbox Code Playgroud)