str_subset с вьющимися вьющимися в R - PullRequest
0 голосов
/ 03 апреля 2020

У меня есть небольшая функция для чтения в файлах с определенной строкой, используя str_subset, которая работает, если я передаю аргумент в кавычках, но я хочу сделать это без него. Я думал, что смогу сделать это с помощью curly curly, но он не работает.

Рабочий пример с кавычками:

#creating csv file
library(tidyverse)
write_csv(mtcars, "C:\\Users\\testSTACK.csv")


#reading function
read_in_fun <- function(x) {

  setwd("C:\\Users")
  d <- list.files()   #lists all files in folder
  file <- d %>% 
    str_subset(pattern = x)

  #read in
  df <- read_csv(file)

  arg_name <- deparse(substitute(x)) 
  var_name <- paste("df_new", arg_name, sep = "_") 
  assign(var_name, df, env = .GlobalEnv) 

}

read_in_fun("STACK")

#this works, returns df called:
df_new_"STACK"

сейчас, если я попытаюсь пройти без кавычек, используя curly фигурный подход:

read_in_fun <- function(x) {

  setwd("C:\\Users")
  d <- list.files()   #lists all files in folder
  file <- d %>% 
    str_subset(pattern = {{x}})

  #read in
  df <- read_csv(file)

  arg_name <- deparse(substitute(x)) 
  var_name <- paste("df_new", arg_name, sep = "_") 
  assign(var_name, df, env = .GlobalEnv) 

}
read_in_fun(STACK)
#Error in type(pattern) : object 'STACK' not found

также пытался использовать enquo

read_in_fun <- function(x) {

  x_quo <- enquo(x)


  setwd("C:\\Users")
  d <- list.files()   #lists all files in folder
  file <- d %>% 
    str_subset(pattern = !! as_label(x_quo)) #OR !!(x_quo)

  #read in
  df <- read_csv(file)

  arg_name <- deparse(substitute(x)) 
  var_name <- paste("df_new", arg_name, sep = "_") 
  assign(var_name, df, env = .GlobalEnv) 

}
read_in_fun(STACK)
# Error during wrapup: Quosures can only be unquoted within a quasiquotation context.

Мой желаемый вывод - df, называемый df_new_STACK. Можно ли использовать фигурные вьющиеся таким образом? Спасибо

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