假設dt
是一個data.table
對象,其列A
,B
和C
。R data.table處理混淆變量名稱的一行語句
我想在列循環過濾掉一些行,然後在該列應用功能:
for(col in c("A", "B", "C")){
dt[col %in% some_filter[[col], col := some_function(col), with=FALSE]
}
哪裏some_filter
是包含一些有效值list
,例如some_filter[["A"]] = c("just", "an", "example")
等
但是通過參考col
這4個位置,data.table
似乎弄亂了命名空間並且失敗了。
通過臨時變量有一個解決方法,但如何在一行中執行此任務?
一個不工作的代碼是:
library(data.table)
library(dplyr)
dt <- data.table(A=1:10, B=11:20, C=21:30)
f <- list()
f[["A"]] <- 3:5
f[["B"]] <- 14:18
f[["C"]] <- 28:29
for(col in colnames(dt)){
dt[col %in% f[[col]], col := col * 2, with=F] # Double up some rows
}
你能預期的輸出增加的問題。也許你想要的是'get(col)'在data.table中調用 – dww
是的,請用實況(即示例函數)填寫'f'並添加預期的輸出。 – lukeA