настройка для цикла в блестящей - PullRequest
0 голосов
/ 21 апреля 2019

Я пишу простое блестящее приложение. Я пытаюсь вычислить CV нескольких переменных, показанных ниже.

 std1_cv<-reactive({std_data_out_rm() %>% filter(Content == "Std-01") %>% 
select(outlier) %>% sapply(cv, na.rm = TRUE)})
  std2_cv<-reactive({std_data_out_rm() %>% filter(Content == "Std-02") %>% 
select(outlier) %>% sapply(cv, na.rm = TRUE)})
  std3_cv<-reactive({std_data_out_rm() %>% filter(Content == "Std-03") %>% 
select(outlier) %>% sapply(cv, na.rm = TRUE)})
  std4_cv<-reactive({std_data_out_rm() %>% filter(Content == "Std-04") %>% 
select(outlier) %>% sapply(cv, na.rm = TRUE)})
  std5_cv<-reactive({std_data_out_rm() %>% filter(Content == "Std-05") %>% 
select(outlier) %>% sapply(cv, na.rm = TRUE)})
  std6_cv<-reactive({std_data_out_rm() %>% filter(Content == "Std-06") %>% 
select(outlier) %>% sapply(cv, na.rm = TRUE)})

Затем я хочу проверить, выполнено ли условие, что CV меньше 0,065. Итак, я создал вектор результатов.

std_cv<-reactive({c(std1_cv(), std2_cv(), std3_cv(), std4_cv(), std5_cv(), std6_cv())})

Пока все хорошо. Я хочу создать цикл for для каждого элемента, чтобы создать новый логический вектор:

std_cv3 <- reactive({c()
for(std in std_cv()){
std <- c()
if(as.numeric(std_cv()[1]) < 0.065){
  std_cv3()<-TRUE
}
else{std_cv3()<-FALSE}
}

})

Проблема в том, что это не похоже на работу. Я получаю сообщение:

Ошибка: неверная (NULL) левая сторона назначения

Честно говоря, я в растерянности, это мое первое блестящее приложение. Я довольно новичок в этом, и я подозреваю, что может быть простой ответ на эту головоломку, которая смущает. Что еще более смущает, так это то, что я занимался этим последние 48 часов и потерял всякую надежду. Какие-либо предложения? Спасибо за вашу помощь

Ответы [ 2 ]

0 голосов
/ 21 апреля 2019

Вы можете избежать цикла, потому что < векторизовано.

std_cv3 <- reactive({
  std_cv() < 0.065
})
0 голосов
/ 21 апреля 2019

Нельзя сохранить значения в самом реактивном выражении.

c() <- 1 # does not work

c <- c()
c <- 1 # does work

Как-то так должно работать

std_cv3 <- reactive({
  std_cv3 <- std_cv3()

  for(std in std_cv()){
    std <- c()
    if(as.numeric(std_cv()[1]) < 0.065){
      std_cv3<-TRUE
    }
    else{std_cv3<-FALSE}
  }
  std_cv3
}) 

Вы должны использовать запись std_cv3 в последней строке, потому что будет возвращена последняя переменная в реактивном выражении.

Как указано в комментарии, я бы не рекомендовал использовать реактивное выражение c (), поскольку c () зарезервировано как функция объединения в R и может вызвать непредвиденное поведение. Всегда используйте переменную, например, которая объясняет ожидаемый результат, например "std_result_1"

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