2015-01-15 54 views
-1

只要遇到此問題。我正在使用一個數據框,其中包含幾千個使用單詞和單詞分割創建的列。我的一個專欄的名字是「in」,另一個名字是「if」。當試圖做數據$ in之類的事情時,會有一條錯誤消息抱怨這一點。見例如:使用「in」,「if」作爲R中的列名稱時出錯

require(tm) 
text<-data.frame(colText<- c("namein", "Inmortal")) 
corpus <- Corpus(DataframeSource(text)) 
corpus[[1]] 
<<PlainTextDocument (metadata: 7)>> 
    namein 
ctrl <- list(tokenize = strsplit_character_tokenizer,wordLengths=c(1, Inf)) 

dtm <- DocumentTermMatrix(corpus, control = ctrl) 
str(dtm) 
dtm$dimnames$Terms 
[1] "a" "al" "e" "ein" "i" "in" "inm" "inmo" "l" "m" "me" "mo" "n" "na" "nam" "name" "o" "ort" 
[19] "r" "rt" "rtal" "t" 

dtmF <- as.data.frame(inspect(dtm)) 

dtm$inm 
[1] 0 1 
dtmF$in 
Error: unexpected 'in' in "dtmF$in" 

strsplit_character_tokenizer <- function(x){ 
    r<-list() 
    max=4 
    for (i in 1:max) { 
    reg<-paste("([[:alnum:]]{",i,"})", sep="") 
    tmp=unlist(strsplit(gsub(reg, "\\1 ", x), " ")) 
    r<-c(r,tmp) 
    } 
    return (unlist(r)) 
} 

其結果是,當我訓練的SVM分類崩潰, 如何才能解決這個問題?我可以重命名其中的一些列名的,但我想一個更通用的解決方案 感謝

+0

我還沒有在提供的答案中看到錯誤的原因。這是因爲'in'是一個保留的R字。解析器將其視爲一個部分'for'循環調用。見'?保留' – 2015-01-15 22:08:59

回答

1

而不是使用$,您可以訪問的列

  • dtmF[["in"]]dtmF[["if"]]

  • dtmF[, "in"] and dtmF[, "if"]
+0

謝謝大衛。對不起,也許不夠精確,即使dtmF $「in」工作,我知道如何訪問列值,但我需要的是一個通用的解決方案,如果我想用它來分類,例如svm等 – 2015-01-15 17:54:56

+0

@ DrVComas也許我不明白完整的問題。重讀,我看到你注意到'當我訓練一個svm進行分類時它崩潰了。這就是需要一個通用解決方案的實際問題:您需要顯示進行培訓的代碼並顯示它如何崩潰。事實上,你顯示的問題只是用'$'來訪問它。 – 2015-01-15 17:56:32

+0

可以說,在我有數據框後,我將運行幾種分類算法,在它們內部以這種方式訪問​​數據,並返回錯誤, – 2015-01-15 17:57:09

2

你需要給我們'標記。

> my$in 
Error: unexpected 'in' in "my$in" 
> my$`in` 
[1] 1 2 3 4 5 
相關問題