1

ggplot2関数を使用して同じ列名を抽出する汎用関数を使用して、各データポイントのエラーバーを生成したいと考えていnamesます。以下はデモコードです。

plotfn <- function(data, xind, yind, yerr) {
    yerrbar <- aes_string(ymin=names(data)[yind]-names(data)[yerr], ymin=names(data) [yind]+names(data)[yerr])
    p <- ggplot(data, aes_string(x=names(data)[xind], y=names(data)[yind]) + geom_point() + geom_errorbar(yerrbar)
    p
}

errdf <- data.frame('X'=rnorm(100, 2, 3), 'Y'=rnorm(100, 5, 6), 'eY'=rnorm(100))
plotfn(errdf, 1, 2, 3)

これを実行すると、次のエラーが発生します。

Error in names(data)[yind] - names(data)[yerr] : 
  non-numeric argument to binary operator

助言がありますか?ありがとう。

4

1 に答える 1

9

-( 'a-b'not 'a'- 'b')を含む文字列を渡す必要があります。

例えば、

ggplot(mtcars,aes_string(y = 'mpg-disp',x = 'am')) + geom_point()

あなたの例では

plotfn <- function(data, xind, yind, yerr) {
  # subset the names now so it is slightly less typing later
  yerr_names <- names(data)[c(yind,yerr)]

  yerrbar <- aes_string(ymin = paste(yerr_names, collapse = '-'), 
                         ymax = paste(yerr_names,collapse='+'))
   p <- ggplot(data, aes_string(x=names(data)[xind], y=names(data)[yind])) + 
     geom_point() + 
     geom_errorbar(mapping = yerrbar)
          p
}

# a slightly smaller, reproducible example
set.seed(1)
errdf <- data.frame('X'=rnorm(10, 2, 3), 'Y'=rnorm(10, 5, 6), 'eY'=rnorm(10))
plotfn(errdf, 1, 2, 3)

ここに画像の説明を入力

于 2013-08-20T05:31:21.077 に答える