2012-09-30 19 views
0

當我解析網頁文件,它工作正常,如何在R中的xpath中使用變量?

tdata=xpathApply(data,"//table[@id='PL']") 

我想在xpathApply使用變量,

x="PL" 
tdata=xpathApply(data,"//table[@id=x]") 

它不能正常工作,如何寫XPath表達式中xpathApply變?

認爲對於達誠的建議,

x="PL" 
y=paste0("//table[@id='",x,"']") 
tdata=xpathApply(data,y) 

這是確定的,但我覺得這是醜陋的,我怎麼能寫更漂亮?

+1

讀'?paste'或'?paste0'或'?sprintf' – Dason

+3

你可以讓你的問題「更加美麗」,由更加註重大小寫,拼寫和語法。 –

+0

@Dason,你可以發表你的評論作爲答案,達達莉莉可以接受它解決? –

回答

1

@ Dason建議使用paste或者其中之一很可能是唯一的選擇。如果你覺得難看,你可以創建自己的功能的地毯下掃:

my.xpathApply <- function(data, x) xpathApply(data, paste0("//table[@id='",x,"']")) 
tdata <- my.xpathApply(data, "PL") 

畢竟,你必須使用大量的使用paste某處包的功能,所以你應該確定具有一個你自己:-)

3

如果我們在前面介紹函數的參數要包含fn$替換的函數,gsubfn包可以沿着Perl的某些線執行字符串插值。這裏$x的意思是代替x的值。參見?fn和gsubfn home page

library(gsubfn) 
x <- "PL" 
tdata <- fn$xpathApply(data, "//table[@id='$x']") 
+0

x是一個「保留」的名字嗎?我在問,因爲'x < - 1; fn $ print('$ x')'返回'「NA」'(儘管沒有警告),但它按預期工作,即返回'「1」',如果我另外命名變量。對我來說就像一個錯誤。 – flodel

+1

'x < - 1; fn $ print(「$ x」)'適用於我。你使用的是舊版本的gsubfn嗎?最新版本是0.6.4。 –

+0

我正在使用0.6.3。我確認它在0.6.4下工作,我的不好。 – flodel