2016-08-17 4 views
1

함수를 setorder에 전달하려고합니다. 이상적으로는 함수가 데이터 테이블의 데이터 테이블 이름과 변수 이름을 가져 와서 변수를 기반으로 테이블의 순서를 변경 한 다음 다른 작업을 수행하고 싶습니다.R 함수에서 setorder에 입력을 전달하는 방법

다음은 내가하고 싶은 일의 예입니다.

dt <- data.table(replicate(10,sample(0:100,1000,rep=TRUE))) 
sortFunction <- function(dt,var) { 
    v2 <- deparse(substitute(var)) 
    data.table::setorder(dt,v2) 
    return(dt) 
} 

sortFunction(dt, var = "V1") 

적으로는, 내가이 함수는 문자 변수 dt 글로벌 환경에서 데이터 테이블임을 인식해야하고 싶습니다; 즉 dtvar이 문자 변수로 전달 된 다음 데이터 테이블로 인식되고

+1

이있다'setorderv'는' – thelatemail

+0

이 제안은 첫 번째 문제를 해결한다. 코드'sortFunction를 < - 함수 (dt, var) { data.table :: setorderv (dt, var) return (dt) } sortFunction (dt, var = "V2")'내가 원하는 것을 수행합니다. dt 자체 대신에 함수에 넣는 것입니까? – JerryN

+1

정말 추천하지 않지만'f thelatemail

답변

2

내가 마지막으로 수행 한 작업입니다.

  • 이있는 데이터 테이블을 통과보다는 ( GET을 통해 액세스하려고 계속 DT, envir = .GlobalEnv.

  • 데이터 테이블과 컬럼의 캐릭터 이름

    사용 setorderv 이 질문에 아니지만 setorderv는 열 이름/열 이름 문자 변수로.

  • 를 원하기 때문에, 내가 할 노력했다 함수 내에서 일부 그래프이었다. 나는 설정하는 방법을 알아 냈어 아내 의 j 필드에서 플롯을 작성합니다.

현재 전체 기능이 있습니다. 내가이 질문을 게시하기 전에이 코드 스 니펫을 사용하는 것이 유용했을 것이므로 전체 설명없이 게시합니다.

deltaPlot <- function(dt, var, title, ylabel, regions) { 
    if (missing(regions)) {regions <- 156} 
    dt.temp <- data.table::copy(dt) 
    data.table::setorderv(dt.temp, var) 
    junk <- dt.temp[,{ 
    plot(x = get(var), type = "s", main = title, 
       ylab = ylabel, 
       xlab = "", 
       xaxt = "n", 
       cex.lab = 0.8, mgp = c(2.5, 1, 0), 
       yaxs = "r") 
    abline(h = 0) 
    axis(1, at = 1:regions, labels = region_code.IMPACT159, cex.axis = 0.5)} 
    ] 
} 

var 및 region_code.IMPACT159에 포함 된 문자열은 모두 dt의 열입니다. var 열은 숫자이고 region_code.IMPACT159는 문자입니다.

deltaPlot(dt = dt.budgetShare.wide, 
      var = "delta.SSP1", title = "Delta SSP1", 
      ylabel = "Change in IMPACT commodity\nshare of per capita GDP (%)" 
) 

출력. 당신이`(DT "V2")를 setorderv을 '그리고 ... (은`deparse (대체를 피할 수 있도록 Plot generated by function above

관련 문제