【发布时间】:2016-08-30 11:32:34
【问题描述】:
在编写 R 代码来识别具有数字数据的列时,我遇到了一些问题,并在 SO 上找到了这个问题:Is there a vectorized way to use 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
但如果我将 sapply 更改为 apply,我就会找到导致我的问题的原因。
> 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
为什么 apply 和 sapply 会导致不同的评估?
【问题讨论】:
-
help(apply)- 如果X不是数组,而是具有非空暗值的类的对象(例如数据框),则尝试将其强制为如果数组是二维的(例如,数据框),则通过as.matrix或通过as.array获得数组。 -
apply和lapply是不同的函数,难怪它们给出不同的结果。请注意充分了解它们的作用以及何时使用它们。 -
@RichardScriven - 感谢您提供的详细信息。我在申请中没有看到那一点 - 显然我忽略了它或者在正确的上下文中没有欣赏它。如果可以的话,我会赞成或接受你的回答。
-
@nicola - 我不记得在我的问题中提到 lapply,但是是的,它与 apply 不同。
-
@KirkDCO 你做到了,因为
sapply只是lapply的包装器,它“美化”了输出。如果lapply与apply不同,那么sapply也不同。难怪你得到不同的输出。
标签: r