좋아, 내 문제를 설명하는 적절한 방법을 찾기 위해 약간 고심하고 있습니다. 멍청한 질문이라면 미안하지만 아직 배우는 중입니다.
정기적으로 "CountX_YYYY"라는 이름의 일련의 작은 data.frame이 있습니다 (X는 특정 경우를, YYYY는 주어진 연도를 나타냄). 다음과 같이 특정 유형 (X)을 가져 와서 모두 바인딩하고 ID (연도)를 정리하여 시작하는 함수를 작성했습니다.
library(dplyr)
analysis <- function(case_pattern){
cases <- mget(ls(pattern = case_pattern)) %>%
bind_rows(.id = "id") %>%
rename(year = id) %>%
mutate(year = str_sub(year,-4))
return(cases)
}
어디에 case_pattern
사용되며, 예를 들어,"^Count1"
매우 간단한 코드이며 아래 에서처럼 함수 본문을 수동으로 실행하면 정상적으로 작동합니다.
case_pattern <- "^Count1"
cases <- mget(ls(pattern = case_pattern)) %>%
bind_rows(.id = "id") %>%
rename(year = id) %>%
mutate(year = str_sub(year,-4))
그러나 함수를 호출하여 똑같은 작업을 수행하면 :
case_pattern <- "^Count1"
analysis(case_pattern)
다음 오류가 발생합니다.
Error: This tidyselect interface doesn't support predicates yet.
i Contact the package author and suggest using `eval_select()`.
(아래, 역 추적, 도움이되는지 모르겠습니다)
29.
stop(fallback)
28.
signal_abort(cnd)
27.
abort(c("This tidyselect interface doesn't support predicates yet.",
i = "Contact the package author and suggest using `eval_select()`."))
26.
as_indices_sel_impl(out, vars = vars, strict = strict, data)
25.
walk_data_tree(new, data_mask, context_mask)
24.
reduce_sels(node, data_mask, context_mask, init = init)
23.
eval_c(expr, data_mask, context_mask)
22.
walk_data_tree(expr, data_mask, context_mask)
21.
vars_select_eval(vars, expr, strict, data = x, name_spec = name_spec,
uniquely_named = uniquely_named, type = type)
20.
withCallingHandlers(expr, simpleError = function(cnd) {
abort(conditionMessage(cnd), parent = cnd)
})
19.
instrument_base_errors(expr)
18.
doTryCatch(return(expr), name, parentenv, handler)
17.
tryCatchOne(expr, names, parentenv, handlers[[1L]])
16.
tryCatchList(expr, classes, parentenv, handlers)
15.
tryCatch(instrument_base_errors(expr), vctrs_error_subscript = function(cnd) {
cnd$subscript_action <- subscript_action(type)
cnd$subscript_elt <- "column"
cnd_signal(cnd) ...
14.
with_subscript_errors(vars_select_eval(vars, expr, strict, data = x,
name_spec = name_spec, uniquely_named = uniquely_named, type = type),
type = type)
13.
eval_select_impl(x, names, {
{
sel
} ...
12.
rename_impl(NULL, .vars, quo(c(...)), strict = .strict)
11.
tidyselect::vars_rename(names(.data), !!!enquos(...))
10.
rename.data.frame(., year = id)
9.
rename(., year = id)
8.
function_list[[i]](value)
7.
freduce(value, `_function_list`)
6.
`_fseq`(`_lhs`)
5.
eval(quote(`_fseq`(`_lhs`)), env, env)
4.
eval(quote(`_fseq`(`_lhs`)), env, env)
3.
withVisible(eval(quote(`_fseq`(`_lhs`)), env, env))
2.
mget(ls(pattern = case_pattern)) %>% bind_rows(.id = "id") %>%
rename(year = id) %>% mutate(year = str_sub(year, -4))
1.
analysis(case_pattern)
이 오류를 식별 / 이해할 수 없었지만 두 가지 방법 모두 동일한 출력을 제공해야하는 것 같습니다. 그렇지 않습니까?
어쨌든 미리 감사드립니다!
문제는에 따른 것으로 보인다 envir
에 ls
와 mget
있기 때문에 mget
그 기능 ENV 내부의 개체를 찾고있는 함수 내에서
library(dplyr)
analysis <- function(case_pattern) {
mget(ls(pattern = case_pattern)) %>%
bind_rows(.id = 'id')
}
Count1 <- head(mtcars)
Count2 <- head(mtcars)
analysis("^Count\\d+$")
#data frame with 0 columns and 0 rows
envir
to를 지정할 수 있으며 .GlobalEnv
작동해야합니다.
analysis <- function(case_pattern) {
mget(ls(pattern = case_pattern, envir = .GlobalEnv), envir = .GlobalEnv) %>%
bind_rows(.id = 'id')
}
analysis("^Count\\d+$")
# id mpg cyl disp hp drat wt qsec vs am gear carb
#Mazda RX4...1 Count1 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
#Mazda RX4 Wag...2 Count1 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
#Datsun 710...3 Count1 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
#Hornet 4 Drive...4 Count1 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
#Hornet Sportabout...5 Count1 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
# ...
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다