unlist(lapply(My_data1, function(x){ + shapiro.test(x)$p.value + })) Error in shapiro.test(x) : 不是所有的is.numeric(x)都是TRUE 请解决报错
时间: 2024-03-03 15:52:58 浏览: 219
这个错误是由于 `shapiro.test()` 函数只能接受数值型向量作为参数,而您的数据中存在非数值型的变量导致的。您需要先将数据中的非数值型变量删除或转换为数值型变量,再进行 `shapiro.test()` 的检验。
以下是一个例子,假设您的数据框中有两列数据,其中 `var1` 是数值型变量,`var2` 是非数值型变量,您可以使用下面的代码进行检验:
```
# 假设您的数据框名为 My_data1,将 var2 列删除
My_data2 <- My_data1[, -which(sapply(My_data1, class) == "factor")]
# 对 My_data2 中的每一列进行 shapiro.test() 检验
p_values <- unlist(lapply(My_data2, function(x) {
if (is.numeric(x)) {
shapiro.test(x)$p.value
} else {
NA
}
}))
```
在这个例子中,我们使用了 `sapply()` 函数将 `My_data1` 中每一列的类型判断为 `factor` 或者 `numeric`,然后使用 `which()` 函数找到所有类型为 `factor` 的列的索引,再使用负索引将这些列删除,得到只包含数值型变量的数据框 `My_data2`。接着,我们使用 `lapply()` 函数对 `My_data2` 中的每一列进行 `shapiro.test()` 的检验,并将检验结果中的 p 值取出,最后使用 `unlist()` 函数将所有 p 值合并为一个向量。在检验过程中,我们使用了 `is.numeric()` 函数判断当前列是否为数值型变量,如果不是,则返回 `NA`。
阅读全文