2
parse
是一個返回表達式的函數。這樣做通過解析或表達式定義表達式之間的區別
parse(text = "print('hey')")
回報
expression(print('hey'))
你也可以通過做
expression(print('hey'))
識別表情稍微令人驚訝的這個輸出是
expression(print("hey"))
注雙的變化引號。但這不是唯一的區別。通過parse(text = "print('hey')")
到getParseData
具有與傳遞expression(print('hey'))
不同的輸出。
getParseData(parse(text = "print('hey')"))
line1 col1 line2 col2 id parent token terminal text
9 1 1 1 12 9 0 expr FALSE
1 1 1 1 5 1 3 SYMBOL_FUNCTION_CALL TRUE print
3 1 1 1 5 3 9 expr FALSE
2 1 6 1 6 2 9 '(' TRUE (
4 1 7 1 11 4 6 STR_CONST TRUE 'hey'
6 1 7 1 11 6 9 expr FALSE
5 1 12 1 12 5 9 ')' TRUE )
而
getParseData(expression(print('hey')))
NULL
我不確定這兩位輸出,我非常希望之間的差別就知道了。
另一個問題是(這可能會作爲一個單獨的問題,一旦這是回答問)parse
甚至沒有一致的返回'可解析'輸出。當我在Rstudio的測試環境中測試使用parse
的功能時,我首先意識到存在差異,該功能調用devtools::test
。在那裏,parse(text = expression(print('hey')))
返回了雙引號輸出expression(print("hey"))
,它在傳遞到getParseData
時返回NULL
那麼,問題就是爲什麼'表達(打印(「嗨」))'改變了引號雙引號?我並不感到驚訝,getParseData()不會返回未通過parse()運行的信息 - 它沒有任何行和列信息供其處理。也許你可以在這裏問一個明確的問題? – MrFlick
確切的問題是輸出之間的差異。例如,您提到的行列信息。我怎樣才能從輸出中診斷它的缺席或在場(除了試圖解析它),從視覺上看,這兩個輸出看起來非常相似。 – OganM
如果你有'a <-parse(text =「print('hey')」); b <-expression(print('hey'))'將它們的結構與'str(a); str(b);'你可以看到他們不一樣。 – MrFlick