Аргумент имеет длину 0

Я пытаюсь использовать следующий синтаксис, чтобы получить информацию о занятиях с страницы wikipedia Джорджа Клуни. В конце концов я бы хотел, чтобы там был цикл, чтобы получать данные о занятиях разных личностей.

Тем не менее, я получаю следующую проблему при запуске кода ниже:

Error in if (symbol != "role") symbol = NULL : argument is of length zero

Я не уверен, почему это продолжается.

library(XML)
library(plyr)
  url = 'http://en.wikipedia.org/wiki/George_Clooney'  

# don't forget to parse the HTML, doh!
  doc = htmlParse(url)  

# get every link in a table cell:
  links = getNodeSet(doc, '//table/tr/td') 

# make a data.frame for each node with non-blank text, link, and 'title' attribute:
  df = ldply(links, function(x) {
                text = xmlValue(x)
            if (text=='') text=NULL
         symbol = xmlGetAttr(x, 'class')
         if (symbol!='role') symbol=NULL
         if(!is.null(text) & !is.null(symbol))
                 data.frame(symbol, text)         } )  

Ответ 1

Как упоминалось в @gsee, вам нужно проверить, что symbol не NULL, прежде чем проверять его значение. Здесь небольшое обновление вашего кода, который работает (по крайней мере, для Джорджа).

df = ldply(
  links, 
  function(x) 
  {
    text = xmlValue(x)
    if (!nzchar(text)) text = NULL
    symbol = xmlGetAttr(x, 'class')
    if (!is.null(symbol) && symbol != 'role') symbol = NULL
    if(!is.null(text) & !is.null(symbol))
      data.frame(symbol, text)         
  } 
)

Ответ 2

Используйте col.names = my_column_names в kable() с my_column_names, являющимся символьным вектором ваших желаемых имен, для меня это сработало! - Бенджамин Телькамп