2011-06-28 37 views
1

我的R代码里面是:R警告:错误的因素

means_log_adj <- aggregate(lab_data[,delta_touse], 
    by = list(
     factor(mydata_adj$Response_EP, labels = c("non_responder", "responder")), 
     factor(mydata_adj$sex,labels = c("male","female")), 
     factor(mydata_adj$timepoint,labels = c("baseline","wk1","wk2","EP"))), 
    mean) 

Warning message: 
> mistake in factor 
> (mydata_adj$Response_EP, labels = 
> c("non-responder", "responder")): 
> invalid labels; length 2 should be 1 
> or 0. 

任何人可以帮助我解决我的问题呢?

+5

一个可重复的例子(即:实际的数据或它的一部分)将是很好的。但是,看起来你的Response_EP只能保存1个值(也许只有响应者?) –

+0

对我来说,你的问题不是很明显。如果这是一个警告,而不是错误,那么你的代码仍然会运行并产生结果。结果不是你所期望的吗?请发布样本数据和预期结果,以便我们为您提供帮助。 – Andrie

回答

12

经过一些试验和错误,我设法重现您的问题。

但让我开始说R中的warningerror之间有一个非常重要的区别。当您报告问题时,请务必明确区分这两者之间的区别。

x <- letters[1:5] 
factor(x, labels=LETTERS[1:10]) 

Error in factor(x, labels = LETTERS[1:10]) : 
    invalid labels; length 10 should be 1 or 5 

这个错误是因为你告诉factor()与不存在的水平重新标识数据。我为只包含5个级别的变量指定了10个标签。这意味着标签和级别不匹配。

有两种方法来解决这个问题:

首先是要令R确定的水平,只需拨打factor(x)不带任何参数。 (在猜测,这可能是你应该在你的代码已经完成。):

factor(x) 
[1] a b c d e 
Levels: a b c d e 

二是调用factor(x)并指定levels,而不是labels

factor(x, levels=letters[1:10]) 
[1] a b c d e 
Levels: a b c d e f g h i j 

您尚未提供样本数据,因此我们无法测试解决方案。但试试下面的代码:

means_log_adj <- aggregate(lab_data[,delta_touse], 
    by = list(
     factor(mydata_adj$Response_EP,), 
     factor(mydata_adj$sex), 
     factor(mydata_adj$timepoint)), 
    mean)