R警告:因素错误

时间:2011-06-28 12:15:58

标签: 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.

有人可以帮我解决问题吗?

2 个答案:

答案 0 :(得分:13)

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

但首先让我说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)

答案 1 :(得分:1)

将于2011年6月20日12:48添加到Andrie

在示例中提供为:

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

计算结果集中的级别数。这里有5个,因此您可以将比率设置为1:5。这在执行bubbleMap的key.entries变量时效果很好。当我收到此错误时,我要做的第一件事是安德烈(Andrie)规定的内容,并使用显示的级别数更新比率。