2015-09-21 5 views
1

Следующий код работает для отдельных файлов .html:R: Синтаксическая группу HTML файлов с петлей

doc <- htmlParse("New folder/1-4.html") 
plain.text <- xpathSApply(doc, "//td", xmlValue) 
plain.text <- gsub("\n", "", plain.text) 
gregexpr("firstThing", plain.text) 
firstThing <- substring(plain.text[9], 41, 50) 
gregexpr(secondThing, plain.text) 
secondThing <- substring(plain.text[7], 1, 550) 

Но следующий цикл не делает и дает мне ошибку:

содержание XML не кажется быть XML

file.names <- dir(path = "New folder") 

for(i in 1:length(file.names)){ 
doc <- htmlParse(file.names[i]) 
plain.text <- xpathSApply(doc, "//td", xmlValue) 
gsub("\n", "", plain.text) 
firstThing[i] <- substring(plain.text[9], 41, 50) 
secondThing[i] <- substring(plain.text[7], 1, 550) 
    } 

Я просто пытаюсь извлечь информацию (как я был в состоянии сделать в первой партии кода), а также создать вектор информации.

Любые идеи о том, как решить эту проблему?

+0

Да, спасибо за указание на это, но он все еще не решает проблему с ошибкой. – user2880936

ответ

0

Две вещи. Во-первых, ваши пути были неправильными. Чтобы исправить это, используйте:

filenames = dir(path = "New folder", full.names = TRUE) 

Во-вторых, лучше, чем заполнение двух переменных внутри for петли для создания структурированных данных в функции списка:

result = lapply(filenames, function (filename) { 
    doc = htmlParse(filename) 
    plain_text = xpathSApply(doc, "//td", xmlValue) 
    c(first = substring(plain_text[9], 41, 50), 
     second = substring(plain_text[7], 1, 550)) 
}) 

Теперь result список элементов , где каждый элемент представляет собой вектор с именами first и second.

Несколько других замечаний:

  • Опасайтесь точек в именах переменных - S3 использует точки в именах, чтобы определить класс универсального метода. Использование точек для чего-либо еще в именах переменных вызывает путаницу, и их следует избегать.

  • Оператор gsub в вашей петле не действует.

+0

Это работает! Большое спасибо! – user2880936

+0

Фактически, это возвращает одну и ту же информацию в каждую ячейку - так что она не просматривается в файлах. Есть предположения? – user2880936

+0

@ user2880936 Простая опечатка должна быть исправлена. –

Смежные вопросы