我有以下因子变量:
> 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
答案 0 :(得分:5)
在当前最新的R版本3.3.0上,我在sd(vect)
上收到以下警告:
> 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.
所以我假设您没有使用最新的R内核,因此要求您包含sessionInfo()
或其他内容。现在,你在R 3.2.2。因此,我们需要继续使用R CRAN来查看已更改的内容,不仅在3.3.0中,而且在3.2.2以后的所有版本中。在R CRAN页面:https://cran.r-project.org/中,有一个新的链接:
抱歉,我放了一张照片,因为该链接没有特殊的网址。
以下行在R 3.2.3中的BUG FIXES下:
var(),因此sd()警告现在不推荐使用的因子参数。 (PR#16564)
让我们放大: