6

私ができるデータフレームからいくつかの列を選択するには

require(dplyr)
require(magrittr)

df <- data.frame(col1=c(1, 2, 3), col2=letters[1:3], col3=LETTERS[4:6])

df %>%
  select(col1, col2)

次のような関数を書きたい

f <- function(data, firstCol, secondCol){
   data %>%
    select(substitute(firstCol), substitute(secondCol))
}

しかし、実行f(df, col1, col2)するとエラーが発生します

Error in select_vars(names(.data), ..., env = parent.frame()) : 
  (list) object cannot be coerced to type 'double'
Called from: (function () 
{
    .rs.breakOnError(TRUE)
})()

編集- 少し些細な例:

やりたかったとします。

mtcars %>%
  select(cyl, hp) %>%
  unique %>%
  group_by(cyl) %>%
  summarise(avgHP = mean(hp))

ただし、データセットと変数名が異なります。mtcarsコードを再利用して、、、cylおよびを置き換えることができhpます。しかし、私はむしろそれをすべて関数にラップしたいと思います

4

2 に答える 2

6

この場合、使用できるので非常に簡単です...

f <- function(data, ...) {
  data %>% select(...)
}

f(df, col1, col2)

#>   col1 col2
#> 1    1    a
#> 2    2    b
#> 3    3    c

より一般的なケースでは、次の 2 つのオプションがあります。

  1. https://github.com/hadley/dplyr/issues/352が閉鎖されるまで待ちます
  2. を使用して完全な式を作成しsubstitute()、次に eval()
于 2014-04-10T23:53:25.310 に答える