2015-06-10 3 views
0

Я пытаюсь получить доступ к символьным строкам из вектора в цикле.В R: Как я могу выполнить символьные строки в цикле?

У меня есть Corpus, как это:

library(tm) 
corpus = Corpus(VectorSource(c("cfilm,cgame,ccd","cd,film,cfilm"))) 

Моя цель состоит в том, чтобы избавиться от всех ненужных «C» символы. Обратите внимание, что это означает, что я не хочу удалять c из cd, но ccd, cgame и т. Д.

Я использую эту функцию, которая принимает корпус и удаляет термин со вторым.

toString = content_transformer(function(x,from,to)gsub(from, to, x)) 

Так, например, заменить cgame с игрой, я использую

corpus = tm_map(corpus,toString,"cgame","game") 

Теперь я вместо того, чтобы повторять эту линию для всех членов, я хотел бы использовать цикл, который перебирает ко всем возможным заменам с использованием вектора с соответствующими терминами.

replace = c("game","film","cd") 

Я попробовал два подхода, но ни один из них не будет работать:

for(i in replace){tm_map(corpus,toString,paste("c",get(i),sep=""),get(i))} 

и

for(i in 1:length(replace)){tm_map(corpus,toString,paste("c",replace[i],sep=""),replace[i])} 

В первом случае R говорит мне, что он не может найти объект получил по get (i): Error in get(i) : object 'game' not found. Во втором случае нет сообщения об ошибке, но в корпусе ничего не меняется.

Как я могу запросить элементы в векторе в виде строк, поэтому для контура будет повторяться для всех терминов, что я сделал с corpus = tm_map(corpus,toString,"cgame","game)

+0

Пожалуйста, добавьте из какого пакета функцию 'Corpus'. Обратите внимание, что в первой строке кода нет 3 скобок, поэтому, пожалуйста, отрегулируйте их. – SabDeM

ответ

0

tm_map функция не изменяет корпус на месте, она возвращает модифицированный корпус. Сейчас вы ничего не делаете, чтобы сохранить результат. Попробуйте

for(i in 1:length(replace)){ 
    corpus <- tm_map(corpus,toString,paste("c",replace[i],sep=""),replace[i]) 
    } 

Кроме того, toString на самом деле имя функции в базовой R, так что это не очень хорошая идея, чтобы написать свою собственную функцию с тем же именем.

И наконец, метод get() возвращает значение переменной R с тем же именем, что и переданное им значение символа. Здесь нет причин использовать get(), так как вы хотите продолжить работу со строками, а не с именами переменных.

+0

На самом деле я не заметил, что я не переназначил результат на корпус. Теперь я чувствую себя немой - теперь, как шарм. спасибо – SomewhereDave