Можно ли использовать функцию «суммировать», указав имя переменной в формате скобок? - PullRequest
0 голосов
/ 09 мая 2019

Я столкнулся с проблемой при программировании функции для вычисления средневзвешенного значения и стандартного отклонения (сообщение об ошибке: «Ошибка в summarise_impl (.data, dots): Ошибка оценки: не числовой аргумент для двоичного оператора»).

Для воспроизводимых данных,

set.seed(1)
sample<-as.data.frame(cbind(treat, weight))
treat<-c(rep(0, 10), rep(1, 10))
weight<-runif(20)
for (i in 1:nrow(sample)){
  sample$Y1[i]<-sample$treat[i] + rnorm(1, mean = 0, sd = 1)
  sample$Y2[i]<- -sample$treat[i] + rnorm(1, mean = 0, sd = 1)
}
sample[3, "Y1"]<-NA
sample[5, "weight"]<-NA
sample[1, "weight"]<1000

И код функции, с которой я работаю, выглядит следующим образом.

func<-function(data.name, varlist, cond.var, relation, comp.value, gen.var){

   varlist.de<-unlist(strsplit(varlist, "[+]"))

 ### This is where I ecnountered the problem
  for (i in 1:nrow(data.name)){
   for (j in 1:(length(varlist.de)-2)){
      df_weighted<-
           data.name %>% 
                  summarise(weighted_mean = wt.mean(varlist.de[j+2], varlist.de[j+1]), 
                            weighted_sd = wt.sd(varlist.de[j+2], varlist.de[j+1]))
       }
    }

 return(data.name)

}

## I ran this code, then the error occured. 
func(data.name=sample, 
    varlist="treat+weight+Y1+Y2", 
    cond.var="weight", 
    relation = "!=", 
    comp.value = "NA", 
    My_New_Index1)

В частности, "df_weighted <-data.name%>% group_by (TT)%>% суммировать (weighted_mean = wt.mean (varlist.de [j + 2], varlist.de [j + 1]), weighted_sd = wt.sd (varlist.de [j + 2], varlist.de [j + 1])) ", похоже, выдает сообщение об ошибке" Ошибка в summarise_impl (.data, dots): Ошибка оценки: не числовой аргумент к бинарному оператору ".

Любое предложение по исправлению ошибки будет оценено. Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...