R的基本函数中的明显异常
我有以下因素变量:R的基本函数中的明显异常,r,R,我有以下因素变量: > vect [1] C E D E E B C D B E D D C D E C A B B A D C E E C A C C B A B B A A D C C B D B A E B B D E C D C C B D D B D E C B A E C A [63] D C E A D C B E B A A C E A A C A B B A A C E D C E E B A B E C E B C E B D Levels: A B C D E
> vect
[1] C E D E E B C D B E D D C D E C A B B A D C E E C A C C B A B B A A D C C B D B A E B B D E C D C C B D D B D E C B A E C A
[63] D C E A D C B E B A A C E A A C A B B A A C E D C E E B A B E C E B C E B D
Levels: A B C D E
>
> str(vect)
Factor w/ 5 levels "A","B","C","D",..: 3 5 4 5 5 2 3 4 2 5 ...
>
> dput(vect)
structure(c(3L, 5L, 4L, 5L, 5L, 2L, 3L, 4L, 2L, 5L, 4L, 4L, 3L,
4L, 5L, 3L, 1L, 2L, 2L, 1L, 4L, 3L, 5L, 5L, 3L, 1L, 3L, 3L, 2L,
1L, 2L, 2L, 1L, 1L, 4L, 3L, 3L, 2L, 4L, 2L, 1L, 5L, 2L, 2L, 4L,
5L, 3L, 4L, 3L, 3L, 2L, 4L, 4L, 2L, 4L, 5L, 3L, 2L, 1L, 5L, 3L,
1L, 4L, 3L, 5L, 1L, 4L, 3L, 2L, 5L, 2L, 1L, 1L, 3L, 5L, 1L, 1L,
3L, 1L, 2L, 2L, 1L, 1L, 3L, 5L, 4L, 3L, 5L, 5L, 2L, 1L, 2L, 5L,
3L, 5L, 2L, 3L, 5L, 2L, 4L), .Label = c("A", "B", "C", "D", "E"
), class = "factor")
当我试图计算它的平均值时,我得到了一个错误(适当地)。但是,如果我试图得到它的标准偏差,我可以得到:
> mean(vect)
[1] NA
Warning message:
In mean.default(vect) : argument is not numeric or logical: returning NA
> sd(vect)
[1] 1.388954
>
我认为mean()和sd()函数应该类似地处理因子变量。问题在哪里?谢谢你的评论
编辑:版本为:
> R.version
platform i486-slackware-linux-gnu
arch i486
os linux-gnu
system i486, linux-gnu
status
major 3
minor 2.2
year 2015
month 08
day 14
svn rev 69053
language R
version.string R version 3.2.2 (2015-08-14)
nickname Fire Safety
在当前最新的R版本3.3.0上,我在
sd(vect)
上收到以下警告:
因此,我假设您没有使用最新的R内核,因此要求您包括sessionInfo()
或其他内容。现在,您使用的是R3.2.2。因此,我们需要继续浏览R CRAN,看看发生了什么变化,不仅在3.3.0中,而且在3.2.2以来的所有版本中。在R CRAN页面:,有一个新内容链接:
对不起,我放了一张图片,因为这个链接没有特别的网址
以下行在R3.2.3中的错误修复中:
var()和sd()警告现在不推荐使用的因子参数。(PR#16564)
让我们放大:
@Zheyuan我的系统没有收到任何警告。@RichardScriven这就是重点。SD函数也应该进行这些检查(它的行为应该类似于平均值)。3.2.2:在问题中添加。在自己的函数中,我得到了“NA±1.28”的平均值±SD输出,这显然是奇怪的。新闻(版本=“3.3.0”&grepl(“var”,Text))以空行输出结束。
> sd(vect)
[1] 1.388954
Warning message:
In var(if (is.vector(x) || is.factor(x)) x else as.double(x), na.rm = na.rm) :
Calling var(x) on a factor x is deprecated and will become an error.
Use something like 'all(duplicated(x)[-1L])' to test for a constant vector.