2012-12-07 61 views
0

嗨我正在處理一個大型數據框,我經常需要在變量的不同組合中進行子集化。我希望能夠將搜索存儲在字符串中,以便我可以在查看子集時引用字符串。R作爲字符串存儲一個複雜的搜索

x = read.table(textConnection(" 
           cat1 cat2 value 
           A  Z 1 
           A  Y 2 
           A  X 3 
           B  N 2"),header=T,strip.white=T) 
search_string="cat1== 'A' & cat2=='Z'" 
with(x,subset(x,search)) 

不起作用。我要找的是類似於下面的搜索的結果。

with(x,subset(x,cat1=='A' & cat2=='Z')) 

我不想在開始時創建多個子集數據框,如果存在其他解決方案。

有沒有一種簡單的方法來做我想要的?

回答

3

您需要將您的字符串轉換爲一個表達式,然後計算該表達式

subset(x, eval(parse(text=search_string))) 

    cat1 cat2 value 
1 A Z  1 

始終記住

fortune(106) 

If the answer is parse() you should usually rethink the question. 
    -- Thomas Lumley 
     R-help (February 2005) 

fortune(181) 

Personally I have never regretted trying not to underestimate my own future stupidity. 
    -- Greg Snow (explaining why eval(parse(...)) is often suboptimal, answering a question triggered by the 
     infamous fortune(106)) 
     R-help (January 2007) 

在這種情況下指出,這是更爲打字去解碼(解析(文本==)))

你也可以嘗試使用quote保存call

search <- quote(cat1== 'A' & cat2=='Z') 

,然後只用

subset(x, eval(search)) 

要記住,那subset具有非標準的評價,所以可能是更安全的使用也很重要`[`

x[eval(search,x),] 

x[eval(parse(text=search_string)), x),] 
+0

謝謝@mnel。很好的答案 –

相關問題