2017-03-03 113 views
0

我在文本數據上使用了一個決策樹,並將n個最頻繁的項存儲在一個變量中,我嘗試在rpart函數的公式中使用此變量。但是,我得到的錯誤是:R中的rpart:公式中的變量

Error in model.frame.default(formula = class ~ x, data = dtm.df, na.action = function (x): variable lengths differ (found for 'x')

x = findFreqTerms(dtm, 0.5) 
fit = rpart(class ~ x, data = dtm.train 

是否可以填入公式,而不必手動輸入所有的功能會自動?

+0

從你提供給它的示例代碼顯然是這裏的問題的公式。正如在[關於配方類的R文檔](https://stat.ethz.ch/R-manual/R-devel/library/stats/html/formula.html)中指出的那樣,「這樣的模型由一系列術語本身由變量和因子名稱(...)組成,這個術語被解釋爲術語中出現的所有變量和因素的相互作用。「首先,這裏沒有用於迴歸的變量;其次,由於'x'不包含出現在其中的所有類的因素,它會引發錯誤。 –

+0

那麼應該如何在文本數據上使用rpart? '〜'後面應該是來自文檔術語矩陣的單詞,不是? – vdvaxel

+0

您能否向我們提供您想分類的數據樣本?在'〜'之後,你需要變量名或'.',就像'class〜Variable1 + Variable2 + Variable3'或者'class〜.'一樣。 –

回答

0

爲解決

背後的想法,你想達到什麼樣的技術基礎是從使用最頻繁的條款,這些條款都是字符串創建公式。

的廣泛的思路是創建從可變的,而不是在我的評論使用輸入文本(即直接寫入class~Variable1 + Variable2 + Variable3)的公式。

This link provide an example on how to use a string to create a formula,您還需要查看paste()function in R documentationcollapse參數。

代碼

# First find your most frequent terms 
x <- findFreqTerms(dtm, 0.5) 

# Then prepare the variables for the formula 
sMeasureVar <- "class" 
sGroupVars <- paste(x, collapse = " + ") 

# Create the formula from the variables 
fRpart <- as.formula(paste(sMeasureVar, sGroupVars, sep=" ~ ")) 

# Fit the tree associated 
fit <- rpart(formula = fRpart , data = dtm.train) 
+0

這就像一個魅力。但是,有一個問題:如果使用bigrams,那麼它不起作用,即文檔的特徵總是2個單詞。公式會看起來像這樣:class〜a b + c d + e f(如果你這樣輸入,它會顯示「意外符號」)。如果你使用bigrams(或者甚至是trigrams),你有什麼想法公式應該是什麼樣子? – vdvaxel

+0

我發現問題:我只需要在反引號之間放置每個術語。謝謝! – vdvaxel