夏皮罗测试与测试公司;plyr:all';x';值是相同的

夏皮罗测试与测试公司;plyr:all';x';值是相同的,r,dplyr,plyr,R,Dplyr,Plyr,我正在尝试对变量“Size”运行Shapiro-Wilks测试,使用我正在使用ddply(通过变量“Site”和“Category”)进行子集设置的数据集,但我一直收到一条错误消息 这是我的数据集(d)的一个示例。我有9个类别和13个地点的4237次观察: Site Genus Size Category Arn01 ACR 4 ACR Arn01 ACR 7 ACR Arn02 ACR 3

我正在尝试对变量“Size”运行Shapiro-Wilks测试,使用我正在使用ddply(通过变量“Site”和“Category”)进行子集设置的数据集,但我一直收到一条错误消息

这是我的数据集(d)的一个示例。我有9个类别和13个地点的4237次观察:

Site    Genus    Size    Category
Arn01   ACR        4       ACR
Arn01   ACR        7       ACR
Arn02   ACR        3       ACR
我为Shapiro Wilks创建了一个函数:

shap.w <- function(input){ #shapiro wilk test function 
   if(sum(!is.na(input$Size)) > 3 & sum(!is.na(input$Size)) < 5000){
      p <- shapiro.test(input$Size)$p.value
      return(p)}else{return(NA)} }
尽管他们显然不是。如有任何帮助/建议,将不胜感激


ETA输出

dput(d[1:20]:


表格的ETA输出(d$Size)

123456789101121415171718192324242562728292935353363839
14 271 525 548 521 424 201 206  50 357  23  95  36   7 171  11  14  30   4 145  11  21   5  46   4   1   5   1  95   1   2  31   3   1   2   1 
40  41  42  43  44  45  46  48  50  51  53  55  56  57  60  62  63  65  66  70  72  75  76  80  82  83  85  88  90  94  95 100 105 110 120 125 
80   1   9   3   4  22   1   4  42   1   1   4   1   3  64   3   5   9   4  13   1   2   1  20   2   2   2   1   5   1   2  17   1   2   6   2 
128 130 143 150 155 160 180 200 230 300 890 920 

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

您可以返回
NA\u real\u

is.numeric(NA)
[1] FALSE
is.numeric(NA_real_)
[1] TRUE
但这仍然是一个NA:

is.na(NA_real_)
[1] TRUE

但是,
as.numeric
也应该解决这个问题(可能会仔细检查您的函数在给定输入的情况下返回给ddply的内容)

好的,多亏了我在评论中得到的帮助,我能够通过更新函数的代码来解决这个问题:

shap.w <- function(input){           #shapiro-wilks test function 
if(length(unique((input$Size[!is.na(input)]))) > 3 
& length(unique((input$Size[!is.na(input)])))< 5000 ){
p <- shapiro.test(input$Size)$p.value
return(p)}else{return(NA)} }
shap.w 3
&长度(唯一((输入$Size[!is.na(输入)]))<5000){

p谢谢,@Glen_b!原来我在原始代码中使用了不正确的函数。当我更新该函数时,我收到一条新的错误消息,上面写着“error in shapiro.test(input$Size):所有的“x”值都是相同的。我在网站上看到了一些类似的问题,但似乎没有什么能解决我的问题。如果您有任何想法,我将不胜感激!评论不用于扩展讨论;此对话已结束。
is.numeric(NA)
[1] FALSE
is.numeric(NA_real_)
[1] TRUE
is.na(NA_real_)
[1] TRUE
shap.w <- function(input){           #shapiro-wilks test function 
if(length(unique((input$Size[!is.na(input)]))) > 3 
& length(unique((input$Size[!is.na(input)])))< 5000 ){
p <- shapiro.test(input$Size)$p.value
return(p)}else{return(NA)} }