我正在尝试使用以下语法从George Clooney的维基百科页面获取职业信息。最终我希望有一个循环来获取各种人格职业的数据。
但是,运行以下代码时出现以下问题:
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) } )
答案 0 :(得分:29)
正如@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)
}
)
答案 1 :(得分:0)
在kable()中使用col.names = my_column_names,my_column_names是你想要的名字的字符向量,对我来说它有效! - 本杰明特尔坎普