首页 > 解决方案 > 在 R 中的同一函数中同时使用文本和参数

问题描述

首先需要创建相同的数据;

library(tibbletime)
date <- seq(from = as.Date("1979-09-01"), to = as.Date("2019-12-01"), by = "month")
n <- length(date)
df <- matrix(NA, n, 2)
df <- data.frame(df)
var <- sample(1000:5000, n)
df[1] <- date
df[2] <- var
names(df) <- c("date", "var")
df <- as_tbl_time(df, index = date)

我如何使用下面的命令;

filter_time(df, ~"1979-09")

通过 paste0, eval(parse(text = "") 我试过那个;

filter_time(eval(parse(text = paste0("df",",", "~" , "1979-09",sep = ""))))

但它没有用。我对必须为文本格式的时间对象有疑问。如果该代码有效,则可以在 for 循环中使用,谢谢。

标签: rparsingtextformulaeval

解决方案


你也可以用as.formula()

filter_time(df, as.formula(paste0("~", '"', year, '"')))

完整的代表:

library(tibbletime)

date <- seq(from = as.Date("1979-09-01"), to = as.Date("2019-12-01"), by = "month")
n <- length(date)
df <- matrix(NA, n, 2)
df <- data.frame(df)
var <- sample(1000:5000, n)
df[1] <- date
df[2] <- var
names(df) <- c("date", "var")
df <- as_tbl_time(df, index = date)

year <- paste("1979-09")
paste0("~", '"', year, '"')
#> [1] "~\"1979-09\""

as.formula(paste0("~", '"', year, '"'))
#> ~"1979-09"

filter_time(df, as.formula(paste0("~", '"', year, '"')))
#> # A time tibble: 1 x 2
#> # Index: date
#>   date         var
#>   <date>     <int>
#> 1 1979-09-01  3600

推荐阅读