下面是我的代码。我使用额外的变体“ 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)
我的代码可以实现此目标,但看起来并不简洁(引入一个临时变量)。有更好的方法吗?
答案 0 :(得分:2)
假设输入在末尾的注释中可重复显示(下次请确保您的问题包括完整的可重复代码,包括输入),我们可以进行以下更改:
paste0
代替paste
locname
来保存数据框的名称,并创建变量e
来作为数据框所在的环境e[[...]]
代替get
和assign
%<>%
双向管道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_"
答案 1 :(得分:0)
您只有一个临时变量,因为您将数据存储在tmp中,我认为这不是问题。但是,在这种情况下,我看到的唯一可以做的就是直接将tmp代码传递给分配,例如:
assign(
paste(Location_name,"DO",sep = ""),
get(paste(Location_name,"DO",sep = "")) %>% filter(log.DO != -Inf)
)