ラップ関数の中でddply
(R
のplyr
パッケージから)を使用しています。変数の値に基づいてデータセットを要約したいと思います。しかし、wrap関数はどの変数を要約するかを定義する必要があります。ddply inside関数を使用する(非標準評価)
ラップ機能がなければ、私は次のようなアプローチを取ることができます:行動を行いなぜ
sumfun <- function(df, v) { # summarize a given dataframe by a given variable,
d <- ddply(df, .(v), summarize, mean = mean(b), var = var(b))
return(d)
}
# Output using the function:
sumfun(sample_df, "a")
v mean var
1 a 3 NA
:
require(plyr)
# Create sample dataframe:
sample_df <- data.frame(a = rep(1:3, 2), b = rep(3:1, 2), c = rep(c("a", "b"), 3))
sample_df
a b c
1 1 3 a
2 2 2 b
3 3 1 a
4 1 3 b
5 2 2 a
6 3 1 b
# Use ddply to summarize the dataframe:
ddply(sample_df, .(a), summarize, mean = mean(b), var = var(b))
a mean var
1 1 3 0
2 2 2 0
3 3 1 0
しかし、ラップ機能を使用して、私は同じ結果を得ることはありません関数内で使用すると、ddply
の値は異なりますか?関数内でsubstitute(v)
とeval(substitute(v))
を使用しようとしましたが、違いはありません。
関数内の 'd < - ddply(df、。(get(v))、summarize、mean = mean(b)、var = var(b))に変更するだけです。 –
@RonakShah、あなたは絶対に正しいです!私はそれがとても簡単かもしれないとは考えていませんでした。 wrap関数の中で 'get()'を使わずに 'v'を呼び出すと変数の値が得られないのはなぜですか? –
'' plyr'で定義されたドット '.'関数は、' sumfun'の内部で 'ddply(df、v、summarize、mean = mean(b)、var = var(b))'関数が使用されます。後で評価するには '?plyr ::。'と[this vignette](https://cran.r-project.org/web/packages/dplyr/vignettes/nse.html)を参照してください。 – OdeToMyFiddle