2017-11-22 6 views
0

私はthis nice solutionを、your_sentenceの入力としてデータフレームを使ってテストしようとしています。データフレームからのテキスト引数

remove_words <- function(sentence, badword="blame"){ 
    tagged.text <- treetag(file=sentence, format="obj", treetagger="manual", lang="en", 
         TT.options=list(path=":C\\Treetagger", preset="en")) 
    # Check for bad words AND verb: 
    cond1 <- ([email protected]$token == badword) 
    cond2 <- (substring([email protected]$tag, 0, 1) == "V") 
    redflag <- which(cond1 & cond2) 

    # If no such case, return sentence as is. If so, then remove that word: 
    if(length(redflag) == 0) return(sentence) 
    else{ 
    splitsent <- strsplit(sentence, " ")[[1]] 
    splitsent <- splitsent[-redflag] 
    return(paste0(splitsent, collapse=" ")) 
    } 
} 

lapply(your_sentences, remove_words) 

データフレームには、1列と351行があります。 your_sentencesでlapplyでは(私はコールせずに列をデータフレームを使用する場合、同じエラーがある)私は自分のデータフレームのためのコールと列名を使用して、私はこのエラーが表示されます。

> dfnew <- lapply(df$text, remove_words) 
Error in writeLines(text, con = conn.tempfile) : invalid 'text' argument 

は私が解決するために何ができますエラー?

例データ:

df = data.frame(text = c('I blame myself for what happened', 'For what happened the blame is yours', 'I will blame you if my friend removes')) 
+0

を使用すると、エラーが何かがあることを示していますのでことを変更することができます。引数としてstringsAsFactors = FALSEを使用することで問題を解決しますあなたの一時ファイルに間違っているのは、あなたのパスに誤字があるかもしれないということです。 'path =":C \\ Treetagger "'。コロンの前にCを続けてはいけません。 –

+0

@ManuelBickelありがとうございます。私はパス= "C:\\ Treetagger"を修正しましたが、残念ながらエラーが存在します – PitterJe

答えて

2

何残念、:-)その唯一の誤植ことを望みました。しかし、私は第二の推測を持っています。あなたはおそらくStringsAsFactors = TRUEによって引き起こされた困難に踏み込んだでしょう。これにより、関数にcharacterの代わりにfactor型が渡された可能性があります。次のように試してください。

2

文字列が要素として保存されているように見えるため、remove_wordsには文字列ではなく係数値が指定されています。

df <- data.frame(text = c('I blame myself for what happened', 
         'For what happened the blame is yours', 
         'I will blame you if my friend removes'), 
       stringsAsFactors=F) 

それとも、あなたはすでに因子とあなたのdfを定義した場合、あなたはdf <- lapply(df, as.character)

lapply(df$text, remove_words) 
[[1]] 
[1] "I myself for what happened" 

[[2]] 
[1] "For what happened the blame is yours" 

[[3]] 
[1] "I will you if my friend removes" 
+1

追加の説明をサポートしていただきありがとうございます。 1つの小さなタイプミスがあります。 'data.frame'構造体を保持するために' df [] < - lapply(df、as.character) 'で角括弧を使うべきです。それ以外の場合は 'list'が返されます。 –

+0

それは関係なく動作しますが、私は詳細を改善することについての慎重なコメントが好きです –

+0

ありがとう、私はそれにかかわらず、それに関係なく動作しません: 'df = data.frame(A = c(" x "、" y ")) df [ - ](df、as.character) クラス(df) #[1] "リスト" df = data.frame(A = c( "x"、 "y")) df [] < - lapply(df、as.character) class(df) #[1] "data.frame" ' –

関連する問題