r - 中值()的奇怪行为?

标签 r

在应用 median() 时,我注意到一些不一致的行为函数到数据帧。 “不一致的行为”通常意味着我不明白某事,所以我希望有人愿意为我澄清这一点。

我意识到某些函数(例如, min()max() )将数据帧转换为向量并返回整个 df 的相应值,而 mean()sd()为每一列返回一个值。虽然有点令人困惑,但这些行为上的差异不会引起很多问题,因为如果返回标量而不是向量,大多数代码都会中断。然而,median()似乎不一致。例如:

dat <- data.frame(x=1:100, y=2:101)
median(dat)

返回一个向量:[1] 50.5 51.5
但是,有时它会中断:
dat2 <- data.frame(x=1:100, y=rnorm(100))
median(dat2)

返回:[1] NA NA Warning messages: 1: In mean.default(X[[1L]], ...) : argument is not numeric or logical: returning NA 2: In mean.default(X[[2L]], ...) : argument is not numeric or logical: returning NA
然而,median(dat2$x)median(dat2$y)两者都产生正确的结果。

还要考虑以下几点:
dat3 <- data.frame(x=1:100, y=1:100)
dat4 <- data.frame(x=1:100, y=100:199)

在上面,median(dat3)返回 [1] 50.5 NAmedian(dat4)返回 [1] 50.5 149.5 !我希望这两种方法都能起作用,或者两者都不起作用。所以,我显然不明白 median()功能正在运行。

此外,函数如 sd , mean() , min()max()在上述所有情况下,所有结果都产生了预期的(如果看似不一致)结果。

我知道我可以使用类似 sapply(dat2, median) 的东西以获得必要的结果,但我想知道为什么 R 神选择以一种至少在表面上似乎不一致的方式来实现这些核心统计功能。我怀疑我,可能还有其他新手,可能不理解一些基本概念,我很感激你的洞察力。

最佳答案

最近在 median and data frames 中讨论了这种确切的现象。 R-devel 上的线程。共识似乎是mean.data.frame方法应该被弃用,用户应该依赖 sapply .

关于r - 中值()的奇怪行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5902183/

相关文章:

r - 如何从R中的向量返回5个最高值?

r - 添加具有 NA 值的行

r - 合并两个数据框,其中一个完全匹配,一个部分 URL 匹配

r - 计算最小 s-t 切割尚未在 igraph 中实现

r - 检查两个字符串是否是字谜

r - 将操作按钮与选择输入水平对齐 Shiny

R - 根据模式和条件删除字符串列中的子字符串

r - 在R个计数中创建一个向量,计算每个元素出现在另一个向量中的次数

从 R 中的 CSV 文件读取 xts

r - 合并 data.table 中部分重叠的日期范围