將data.framework列名傳遞給函數我試圖編寫一個函數來接受data.framework(x)和column從那里。函數在x上執行一些計算,然后返回另一個data.framework。我堅持使用最佳實踐方法將列名傳遞給函數。兩個極小例子fun1和fun2下面生成所需的結果,能夠在x$column,使用max()舉個例子。然而,兩者都依賴于表面上(至少對我來說)不雅的東西。打電話給substitute()也有可能eval()需要將列名作為字符向量傳遞。fun1 <- function(x, column){
do.call("max", list(substitute(x[a], list(a = column))))}fun2 <- function(x, column){
max(eval((substitute(x[a], list(a = column)))))}df <- data.frame(B = rnorm(10))fun1(df, "B")fun2(df, "B")我希望能夠將這個函數稱為fun(df, B)例如。我已考慮但尚未嘗試的其他選擇:經過,穿過column作為列號的整數。我想這樣可以避免substitute()..理想情況下,該函數可以接受任何一個。with(x, get(column)),但是,即使它有效,我認為這仍然需要substitute利用formula()和match.call()這兩個我都沒有太多的經驗。子問題*是do.call()優先于eval()?
3 回答

搖曳的薔薇
TA貢獻1793條經驗 獲得超6個贊
df <- data.frame(A=1:10, B=2:11, C=3:12)fun1 <- function(x, column){ max(x[,column])}fun1(df, "B")fun1(df, c("B","A"))
fun1 <- function(x, column, fn) { fn(x[,column])}fun1(df, "B", max)
[[
df <- data.frame(A=1:10, B=2:11, C=3:12)fun1 <- function(x, column){ max(x[[column]])}fun1(df, "B")

慕尼黑8549860
TA貢獻1818條經驗 獲得超11個贊
get.max <- function(column,data=NULL){ column<-eval(substitute(column),data, parent.frame()) max(column)}
> get.max(mpg,mtcars)[1] 33.9> get.max(c(1,2,3,4,5))[1] 5
> get.max(1/mpg,mtcars)[1] 0.09615385
- 3 回答
- 0 關注
- 407 瀏覽
添加回答
舉報
0/150
提交
取消