Можно ли написать "assign ()" и "get ()" более кратко? - PullRequest
0 голосов
/ 14 февраля 2019

Ниже мой код.Я использую дополнительный вариант "tmp" для очистки "ABC_Chla".Поскольку «Location_name» может меняться, я использую функции «assign ()» и «get ()».

Location_name <- "ABC_"
tmp <- get(paste(Location_name,"DO",sep = "")) %>% filter(log.DO != -Inf)
assign(paste(Location_name,"DO",sep = ""), tmp)

Мой код может достичь этой цели, но он не является кратким (введите временную переменную),Есть ли лучший способ?

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

Предполагая, что входные данные воспроизводятся в примечании в конце (в следующий раз, пожалуйста, убедитесь, что ваш вопрос содержит полный воспроизводимый код, включая входные данные), мы можем внести следующие изменения:

  • используйте вместо этого paste0из paste
  • создайте переменную locname для хранения имени фрейма данных и переменную e для среды, в которой находится наш фрейм данных
  • , используйте e[[...]]вместо get и assign
  • используйте magrittr %<>% двустороннюю трубу
  • возможно используйте filter(is.finite(log.DO)) - не показано ниже

этот код:

library(dplyr)
library(magrittr)

e <- .GlobalEnv # change if our data frame is in some other environment
locname <- paste0(Location_name, "DO")

e[[locname]] %<>% 
   filter(log.DO != -Inf)

Результат:

get(locname, e)
##   log.DO
## 1      1
## 2      2

Альтернатива

Эта альтернатива использует только обычные трубы.Мы используем e и locname сверху.

library(dplyr)

 e[[locname]] <- e[[locname]] %>% 
  filter(log.DO != -Inf)

Примечание

Тестовый ввод:

ABC_DO <- data.frame(log.DO = c(1, -Inf, 2))
Location_name <- "ABC_"
0 голосов
/ 14 февраля 2019

У вас есть только временная переменная, потому что вы храните данные в tmp, я не вижу в этом проблемы. Но в этом случае единственное, что я вижу, вы можете сделать, это передать код tmp напрямуюназначить, как:

assign(
       paste(Location_name,"DO",sep = ""),
       get(paste(Location_name,"DO",sep = "")) %>% filter(log.DO != -Inf)
      )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...