코드를보다 깨끗하게 유지 보수하기를 원합니다. 특히 수 목록> (100), 이것은이 5 개 요소 목록을 만들기위한 많은 반복이동적으로 변수 이름을 만들고 R 코드를 반복하지 않도록 함수에 동적으로 할당하는 방법은 무엇입니까?
var <- "temperature"
quantsList <- list(
q05 <- paste0('quantile(',var,', probs=.05, na.rm = TRUE)')
q10 <- paste0('quantile(',var,', probs=.10, na.rm = TRUE)')
q25 <- paste0('quantile(',var,', probs=.25, na.rm = TRUE)')
q50 <- paste0('quantile(',var,', probs=.50, na.rm = TRUE)')
q75 <- paste0('quantile(',var,', probs=.75, na.rm = TRUE)')
q80 <- paste0('quantile(',var,', probs=.80, na.rm = TRUE)')
q90 <- paste0('quantile(',var,', probs=.80, na.rm = TRUE)')
q95 <- paste0('quantile(',var,', probs=.80, na.rm = TRUE)')
)
나는 나쁜 코딩 같은 종류를 방지하는 방법을 이해하려면 예를 들어, 다음 quantsList
목록을 집단. 내 검색 결과는 assign()
으로 연결되며 get()
기능입니다. 그러나 나는 이것들을 적절하게 "사용"하는 법을 실제로 알 수는 없습니다. 지금은 내가 무엇을 : 그래서 quantList
이렇게
# Attempt to create the list "quants" with dynamically named elements storing dynamically created functions
assignFuns <- function(q){
quant = paste0("q",q)
assign(quant, paste0('quantile(',var,', probs=.',q,', na.rm = TRUE)'))
return(get(quant))
}
quants <- list(05,10,25,50,75,80,90,95)
quantsList <- lapply(quants, assignFuns)
분위 기능을 저장하는 요소를 포함하지만, 목록 요소 이름이 있습니다.
나는 단순히 사용하여 목록의 요소 이름을 지정할 수 있습니다 알고
names(quantsFuns) <- lapply(quants, function(x) paste0("q",x))
그러나이 워크 플로는 나에게 너무 복잡한 것 같습니다 및 할당의 순간에 내 조합 얻을 쓸모가 없다. assign()
또는 get()
을 더 효율적으로 사용해야합니다. 내 assignFuns()
함수를 적용하여 이름과 해당 함수를 모두 반환해야합니까, 아니면 완전히 다른 방식으로 진행해야합니까? 통찰력과이 문제
편집
그래서 @Roland에 따라, assign()
을 방지하는 것입니다에 대한 저를 제공 할 수있는 도움을
감사합니다. 따라서이 코드를 사용하면됩니다.
assignFuns <- function(q){
quantFun <- paste0('quantile(',var,', probs=.',q,', na.rm = TRUE)')
return(quantFun)
}
quants <- list(05,10,25,50,75,80,90,95)
quantsFuns <- lapply(quants, assignFuns)
names(quantsFuns) <- lapply(quants, function(x) paste0("q",x))
기호를 별도로 지정하지 마십시오. 간단히 다음과 같이하면됩니다 :'prob <- c (0.05, 0.1, 0.25, .5, 0.75, 0.8, 0.8, 0.8); prob <- sub ("0.", ".", formatC (prob, 숫자 = 2, 형식 = "f"), 고정 = TRUE); paste0 ('quantile (', var, ', probs =', prob, ', na.rm = TRUE)') ' – Roland
'assign'은 매우 진보 된 것들입니다. R 환경에서 일하는 전문가가 아니라면 결코 사용해서는 안됩니다. R을 사용한 지난 5 년 동안 제 자신의 작업에서'assign'을 합법적으로 사용하지 못했습니다. – Roland
나는 또한 왜 당신이 R 명령을 텍스트로 작성 중입니다. 나는 당신이 그 (것)들을 평가하거나 분석하기 위하여 계획하지 않는다는 것을 희망한다. – Roland