2012-01-06 52 views
1

虽然编程R,我时间可持续面临着以下错误::输入'数据'不是双重类型?

Error in data.validity(data, "data") : Bad usage: input 'data' is not double type.

谁能请解释为什么这个错误发生的事情,也就是在这导致出现错误的数据集中的原因是什么?

这是我正在运行的代码。我已经加载的软件包是cluster,psychclv

data1 <- read.table(file='dataset.csv', sep=',', header=T, row.names=1) 
data1.p <- as.matrix(data1) 
hello.data <- data1.p[,1:15] 
agnes.mod <- agnes(hello.data) 
v.pred <- as.integer(cutree(agnes.mod,3)) # "cut" the tree 
scatt <- clv.Scatt(hello.data, v.pred) 

Error in data.validity(data, "data") : 
Bad usage: input 'data' is not double type. 
+1

没有人会能够帮助了解更多信息。你运行什么代码会产生这个错误?你正在加载哪些软件包? – joran 2012-01-06 16:39:32

+3

请给我们提供一个可重现的例子。该函数的data.validity是未知的我的R引擎,例如...另请参见:http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example – 2012-01-06 16:40:23

回答

3

data.validity()提高错误的关键部分是:

data = as.matrix(data) 
if(!is.double(data)) 
    stop(paste("Bad usage: input '", name, "' is not double type.", sep="")) 

data被转换为一个矩阵,然后检查是否它是通过is.double()数值矩阵。如果它不是数字,则该子句为真,并且引发错误。那么为什么你的datahello.data)数字转换为矩阵?要么你的数据中有字符变量,要么有因素。你有没有因素?尝试

str(hello.data) 

是否有任何非数字变量在那里?如果你有字符数据然后摆脱它。如果你有因素,那么data.validity()可以通过data.matrix()强制,但因为它没有,尝试

hello.data <- data.matrix(hello.data) 

行创建hello.data然后运行代码后剩下的。

无论这是有道理的(治疗名义或有序变量作为一个简单的数字)是不清楚你没有提供一个重复的例子,或说明你的数据是什么等

+0

::谢谢答案..但我有一个问题..当我将数据集转换为矩阵使用::> data1 < - read.table(file ='data32.csv',sep =',',header = T,row .names = 1)> data.p <-as.matrix(data1) whenevr我打印出数据(data.p)..该函数自动添加列和行名称2它..我怎么避免... ...还有没有其他的功能,但保留矩阵作为完全数字? – 2012-01-06 18:54:45

+0

你为什么要做'data(data.p)'你指定数据有行和列的名字。 R会将结果对象的rownames和colnames属性(或dimnames)作为第一行和第一列(因为这是'header = TRUE'和'row.names = 1'的意思!)。仅仅因为R打印它们并不意味着它们是数据的一部分。请按照我的要求编辑你的问题以显示'str(hello.data)'的输出。其次,我提到你可以使用'data.matrix()'而不是'as.matrix()'。请注意对您的问题的两条评论,以指导您如何改进Q. – 2012-01-06 19:05:32

+0

谢谢!我已经解决了问题! – 2012-01-07 09:59:07