2015-02-05 61 views
0

說我們有一個data.table傳遞函數參數data.table我

myDT <- data.table(id = c("a", "a", "b", "b", "c"), value = 1:5) 
setkey(myDT, id) 

我想創建一個功能

fun <- function(id) { 
    ... 
} 

例如,如果

foo <- rep("b", 6) 

那麼

fun(foo) 
# I want this to return 3 4 

基本上,我想通過id[[1]]從執行環境到i參數myDT

我在這裏很難找到正確的環境,並且正在尋找一些幫助。

更改函數參數的名稱不是一個選項。

+0

if foo = c(「a」,「b」)'你要什麼結果? – 2015-02-05 22:46:32

+0

'foo'總是'rep(x,n)'的形式,其中'x' \在'letters'中 – kevinykuo 2015-02-05 22:47:51

回答

2

嚴格控制範圍定於1.9.8,#633,完成後將使訪問(外部)變量,這也是您的data.table中列名稱更容易。

但是這很容易解決。不知道爲什麼你真的很難。

fun <- function(id) { 
    .id_unique = unique(id) 
    myDT[.(.id_unique), which=TRUE] 
} 

fun(foo) # [1] 3 4 
+0

確實我弄清楚瞭如何解決這個問題(儘管這讓我很難過......)以查看在發生名稱衝突時如何完成該操作 – kevinykuo 2015-02-05 22:53:02

+0

期待該功能請求的實施。長久以來一直夢想着這樣的事情,但直到現在才知道它實際上正在計劃中! – 2015-02-06 02:42:15