R: dcast внутри функции не находит переданную переменную - PullRequest
0 голосов
/ 21 сентября 2018

У меня есть следующее data.frame:

> mydata <- data.frame(gene=rep(paste(sample(LETTERS, 10, replace=TRUE), sample(1:1000, 10, replace=FALSE), sep=''), each=5),
+                    clus=rep(sample(c('clus1','clus2'),10,replace=TRUE), each=5),
+                    treat=rep(LETTERS[1:5],10),
+                    value=rnorm(n=50))
> head(mydata,10)
   gene  clus treat       value
1   R22 clus2     A -0.25592597
2   R22 clus2     B  0.02956595
3   R22 clus2     C  0.36785764
4   R22 clus2     D -1.47393076
5   R22 clus2     E -2.09895513
6  S671 clus2     A -0.17079390
7  S671 clus2     B  1.73643010
8  S671 clus2     C  0.73169650
9  S671 clus2     D -0.85247328
10 S671 clus2     E  1.43589407

У меня есть общая функция, в которой первый шаг dcast a data.frame выглядит следующим образом:

> dcast(mydata, gene+clus~treat, value.var="value")
   gene  clus          A           B            C          D           E
1  B957 clus1 -2.0567334  2.27900277  0.714784782  2.5123012 -0.91194409
2   I55 clus2 -1.3044907 -1.06102427 -0.380294765 -0.1194413  1.90913241
3  M937 clus1 -2.1610684  1.82269937  0.716722593 -0.1525909  0.92291856
4  N986 clus1  0.2483086 -0.41405923 -0.714040214 -0.4243231  0.13645697
5   R22 clus2 -0.2559260  0.02956595  0.367857644 -1.4739308 -2.09895513
6  R295 clus2 -0.4673256  0.08302997 -0.352803402  0.2983689  1.25420084
7  R545 clus1  2.5655384 -0.14798670  1.001409732  0.1971712 -0.11440350
8  S671 clus2 -0.1707939  1.73643010  0.731696498 -0.8524733  1.43589407
9  W131 clus1  0.9915700  0.05430845  0.008878675 -1.7140515  0.06019417
10 Z302 clus1  1.2854086  0.09809435 -2.533077634 -1.0244764 -0.57606345

Хотя это работает вне функции, похоже, что оно не работает внутри ... У меня есть эта минимальная функция:

myfun <- function(mydf, groupvar, groupvar2, measurevar, valuevar){
    newdf <- dcast(mydf, get(measurevar)+get(groupvar2)~get(groupvar), value.var=valuevar)#cannot change sep from "_"
}

Но когда я ее вызываю, я получаю следующую ошибку:

> myfun(mydata, "treat", "clus", "gene", "value")

Ошибка в get (measurevar): объект 'measurevar' не найден

Почему моя функция не находит переменную measurevar, которую я передаю?

Однако, если я return до dcast, он возвращает его без проблем, и dcast внезапно срабатывает:

> myfun <- function(mydf, groupvar, groupvar2, measurevar, valuevar){
+     return(list(groupvar,groupvar2,measurevar,valuevar))
+     newdf <- dcast(mydf, get(measurevar)+get(groupvar2)~get(groupvar), value.var=valuevar)#cannot change sep from "_"
+ }
> myfun(mydata, "treat", "clus", "gene", "value")
[[1]]
[1] "treat"

[[2]]
[1] "clus"

[[3]]
[1] "gene"

[[4]]
[1] "value"

Что здесь происходит?Я действительно ничего не понимаю ... Почему dcast не находит переменную measurevar Я передаю, но если я возвращаю ее в первую очередь, она вдруг делает ??

Спасибо!

...