2013-12-09 127 views
1

我想从数据集中获得pvalues。我没有任何问题使用pnorm,但我现在已经有了。数学函数的非数字参数

data(iris) 

iris[,-5]<- scale(as.matrix(iris[,-5])) 

# K-Means Cluster Analysis 
fit <- kmeans(iris[,-5], 5) # 5 cluster solution 
# get cluster means 
aggregate(iris[,-5],by=list(fit$cluster),FUN=mean) 
# append cluster assignment 
mydata <- data.frame(iris, fit$cluster) 

pval<- pnorm(iris[,-5]) 

在此之后,我得到的消息 “错误的pnorm(Q,平均,SD,lower.tail,log.p): 非数值参数数学函数”。

什么问题?我不明白为什么会发生这种情况。

请让我知道。

回答

3

你试图传递一个数据帧的功能正在请求一个数值向量:

> is.numeric(iris[,-5]) 
[1] FALSE 
> str(iris[,-5]) 
'data.frame': 150 obs. of 4 variables: 
$ Sepal.Length: num -0.898 -1.139 -1.381 -1.501 -1.018 ... 
$ Sepal.Width : num 1.0156 -0.1315 0.3273 0.0979 1.245 ... 
$ Petal.Length: num -1.34 -1.34 -1.39 -1.28 -1.34 ... 
$ Petal.Width : num -1.31 -1.31 -1.31 -1.31 -1.31 ... 

尝试通过只是一个单一的列,例如:

pnorm(iris[,1]) 
+0

有可能通过使p值你的,但我不明白。为什么我上面写的方法不起作用?无论如何,谢谢你的回答。 – user3027252

+0

@ user3027252函数通常只接受某些类型的对象作为参数。看看'?pnorm'。你必须传递一个数字向量,而不是数据帧。例如,你可以使用'sapply(iris [, - 5],pnorm)'来获得数据帧的每一列的值。 – Thomas

+0

我之前使用过'pnorm',并且当时我成功地使用了'pnorm'。也许我意外地将数据框更改为矩阵,但它有像数据框一样的列名。也许必须有其他方法通过将数据帧转换为矩阵来在数据帧中使用pnorm。无论如何,我只是R的新手,我感谢你的帮助!美好的一天! – user3027252