2011-06-28 76 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)