고급 구성

    맞춤 렌더러

    메가 슬롯 MIRO를 사용하면 사용자 정의 렌더러를 사용할 수 있습니다. 당신의 데이터 세트. 이 섹션에서는 다음 방법을 보여 드리겠습니다. 정말 정교한 맞춤형 그래픽을 만들어보세요.

    맞춤 렌더러 결과 - 마커가 있는 지도

    맞춤 렌더러 사용 방법

    데이터세트를 시각화하려면 다음을 작성해야 합니다. 두 가지 기능: 그래프 등이 표시되는 자리 표시자 나중에 렌더링할 뿐만 아니라 렌더링 기능도 그 자체. 이 이중 개념에 대해 자세히 알아보려면 컴포넌트 접근 방식에 대해 알아보려면 R Shiny 웹사이트를 방문하세요. 메가 슬롯 MIRO의 기반이 되는 프레임워크:https://shiny.rstudio.com/. 특히 우리는빛나는 모듈MIRO와 사용자 정의 간의 인터페이스 실현 렌더러 기능. 두 구성 요소에 대한 템플릿 모든 맞춤 렌더러의 내용은 다음과 같습니다.

    mirorenderer_<symbolName>출력 <- 함수(id, 높이 = NULL, 옵션 = NULL, 경로 = NULL)
      ns <- NS(ID)
    
    renderMirrenderer_<symbolName> <- 함수(입력, 출력, 세션, 데이터, 옵션 = NULL, 경로 = NULL, rendererEnv = NULL, 뷰 = NULL, 첨부 메가 슬롯 = NULL, outputScalarsFull = NULL, ...)

    교체해야 한다는 점에 유의하세요.<기호 이름>와 함께 이 렌더러를 사용하려는 메가 슬롯 기호의 이름 위해. 이 코드를 단계별로 살펴보겠습니다. 다음과 같이 언급했듯이 각 사용자 정의 렌더러에 대해 지정해야 합니다. 두 가지 함수: 하나는 자리 표시자를 생성하는 함수이고 다른 하나는 이 자리 표시자를 데이터로 채웁니다. 이름은 자리 표시자 함수는 "로 접미사를 붙여야 합니다.출력" 및 실제를 지정하는 함수의 이름 렌더링 앞에는 " 키워드가 붙어야 합니다.렌더". 우리 이야기로 돌아가자운송예. 우리 상품의 흐름을 지도로 시각화하고 싶습니다. 흐름 데이터가 포함된 메가 슬롯 기호를 호출합니다.optSched. 따라서 우리의 초기 템플릿은 다음과 같습니다:

    mirorenderer_optschedOutput <- 함수(id, 높이 = NULL, 옵션 = NULL, 경로 = NULL)
      ns <- NS(ID)
    참고:

    MIRO는 렌더러 이름이 다음을 따를 것으로 예상합니다. 엄격한 관습. 기호 이름은 렌더러 이름은 모두 소문자로 변환되어야 합니다. 메가 슬롯의 기호가 호출되어도optSched, 렌더러 함수 이름은 다음과 같아야 합니다.mirorenderer_optschedOutput그리고renderMirrenderer_optsched.

    참고:

    사용자 정의 렌더러 스크립트는 폴더에 있어야 합니다 이름:renderer_<모델 이름>모델 디렉토리에 있습니다. 렌더러의 이름 메가 슬롯은 다음과 같아야 합니다:mirorenderer_<기호 이름>.R.

    두 함수 모두 여러 매개변수를 사용합니다. 시작하자 자리 표시자 기능 사용: 각 사용자 정의 렌더러에는 자신의 아이디. 피하기 위해이름 충돌다른 사용자 정의 렌더러 또는 메가 슬롯 MIRO 기능을 사용하여 입력 및 출력 요소 앞에 이 접두어를 붙여야 합니다. 신분증. 사용자 정의 입력 및 출력의 접두어를 어떻게 지정해야 합니까? 그런데 기능은? 다행히도 Shiny는 우리에게 다음을 제공합니다. 기능:NS(). 이 함수는 사용자 정의 렌더러의 ID를 다음과 같이 사용합니다. 입력을 받고 함수(반환하는 함수)를 반환합니다. 함수가 자주 호출됩니다.폐쇄R에서) 우리를 위해 접두사를 지정합니다. 그러므로 우리가 원할 때마다 새로운 입력 또는 출력 요소를 지정하면 간단히 이 요소에 사용하고 싶은 ID 접두사 함수(이 경우에는 다음과 같이 바인딩됩니다.ns변수). 높이를 지정할 수도 있습니다. 렌더러와 렌더러 메가 슬롯이 있는 경로 위치하고 있습니다. 추가 옵션을 전달할 수도 있습니다. 렌더러 함수.

    우리의 예로 돌아가 보겠습니다. 우리가 원하는대로 최적화된 일정을 대화형 지도로 시각화하고, 우리는 인기있는 것을 선택합니다전단지도서관. 다행히도 이미 R/Shiny가 있습니다. 이 라이브러리에 대한 인터페이스:R을 위한 전단지. 이 R 패키지에는 두 가지 기능이 함께 제공됩니다.전단지출력()26250_26310renderLeaflet()리플렛 지도를 렌더링하는 에 의해 생성된 객체전단지()함수 데이터프레임을 첫 번째 인수로 사용합니다. 그럼 넣어보자 조각들을 함께 모아 코드를 확장합니다.

    mirorenderer_optschedOutput <- 함수(id, 높이 = NULL, 옵션 = NULL, 경로 = NULL)
      ns <- NS(ID)
      leaflet::leafletOutput(ns("map"), 높이 = 높이)

    앞서 언급한 내용을 사용했음을 참고하세요NS()ID 접두사를 지정하는 함수("지도")을 Leaflet 요소로 선택했습니다. 여느 것과 마찬가지로 다른 자리표시자 요소, 함수전단지출력()할 수 있는 요소를 생성합니다. 목록과 같은 방식으로 접근 가능출력객체.

    우리 렌더링 기능 내에서 우리는 이 객체에 에서 제작한 전단지 지도입니다.renderLeaflet()함수. 당신이 발견한 경우에는 출력 기능, 렌더링을 갖는 전체 개념 함수, 출력 개체 등은 여전히 매우 혼란스럽습니다. 다음을 살펴봐야 합니다.공식 튜토리얼 시리즈Shiny 프레임워크용.
    요약하자면: 데이터를 생성하는 요소에 접근할 수 있습니다. 에 의해입력객체; 변형하는 요소 데이터를 어떤 형태로든 시각화합니다.출력개체 및 모든 사용자별 정보를 통해세션객체.

    참고:

    이외 패키지의 함수를 사용하는 경우빛나는또는 R 기본 패키지가 있는지 확인하세요. 이것을 내보내는 패키지/네임스페이스를 지정합니다. 기능. 이 예에서는 함수전단지출력, renderLeaflet그리고전단지있습니다 패키지에서 내보냈습니다.전단지. 그래서 우리는 을 사용해야 합니다.이중 콜론 연산자에 액세스하세요(예:전단지::전단출력).

    당신이 시각화하려는 데이터는 당신의 에 의한 렌더링 함수데이터인수 - R티블, 데이터 프레임과 매우 유사한 데이터 구조입니다. 귀하가 지정한 경우추가 데이터세트맞춤 렌더러와 통신하기 위해,데이터이름이 지정된 목록이 됩니다티블여기서 이름은 메가 슬롯 기호 이름입니다. 또한 모든 입력 및 출력 스칼라의 값 인수를 통해 액세스할 수 있습니다.outputScalarsFull(열이 있는 티블스칼라, 설명, ). 는 함수 인수경로문자열입니다(a 1차원 문자형 벡터)를 지정합니다. 귀하의 절대 경로renderer_<모델 이름>디렉토리. 이는 외부를 포함하려는 경우에 유용합니다. 사용자 정의 렌더러 기능의 메가 슬롯. 선택사항 렌더러에 전달하려는 매개변수는 인수를 통해 액세스됨옵션- (중첩된) 목록.

    참고:

    스칼라 변수는 다음에 추가되지 않습니다.outputScalarsFull, 왜냐하면 그들은 속성레벨, 한계, 하위, 상위규모그러므로 실제 스칼라가 아닙니다. 액세스하려면 포함해야 합니다._scalarsve_out추가로 데이터 세트.

    팁:

    목록옵션항상 중첩된 목록이 있습니다 열쇠로_metdata_, 이는 다음을 제공합니다. 렌더링할 기호의 메타데이터에 액세스합니다. 기호 유형(세트, 매개변수, ...) 및 헤더 정보(헤더 이름, 별칭, 유형). 예를 들어, 기호 유형은 다음과 같이 액세스할 수 있습니다.옵션[["_metadata_"]][["symtype"]].

    이제 우리는 모든 사용자 정의 렌더러가 기반으로 구축되었으나 아직 하나가 누락되었습니다. 사용자 정의를 사용할 수 있도록 하는 기본 개념 렌더러: 렌더러를 우리가 원하는 데이터 세트에 바인딩합니다. 시각화하다.

    이 메가 슬롯 매개변수와 렌더러 기능의 바인딩은 다음과 같습니다. 지정 - 다른 렌더러 바인딩과 마찬가지로 -<모델 이름>.json메가 슬롯; 더 정확하게는데이터렌더링섹션. 하자 운송 사례에서 메가 슬롯가 있다고 가정합니다. 최적의 일정을 지정하는 매개변수가 정의됩니다. 와 같이optSched(lngp, latp, lngm, latm, 공장, 시장)어디에서(lngP,latP)그리고(lngm, latm)이것은 각각의 공장과 시장의 좌표. 우리transport.json메가 슬롯은 그러면 다음과 같습니다:

    "데이터렌더링":
          "optSched":
             "outType":"mirorenderer_optsched",
             "높이":"700",
             "옵션":
                "title":"최적의 운송 일정"

    보시다시피 우리는 메가 슬롯 매개변수를 바인딩했습니다.optSched우리의 새로운 관습에 렌더러mirorenderer_optsched. 또한 매개변수를 지정했습니다.제목다음으로 액세스할 수 있습니다. 우리의 커스텀 렌더러는옵션목록.

    지금 MIRO 앱을 실행하기로 결정하더라도 우리는 여전히 그렇게 하지 않을 것입니다. 빈 공간 이외의 것을 볼 수 있습니다. 따라서 우리는 렌더러에 생명력을 채워야 합니다.

    mirorenderer_optschedOutput <- 함수(id, 높이 = NULL, 옵션 = NULL, 경로 = NULL)
      ns <- NS(ID)
      태그목록(
        textOutput(ns("제목")),
        전단지::leafletOutput(ns("맵"))
      )

    제목에 대한 새로운 자리 표시자를 추가했습니다. 참고하세요 의 사용태그목록()함수. R마다 함수에는 다음 중 하나의 단일 반환 값이 있습니다. 함수 또는 인수의 마지막으로 평가된 표현식 첫 번째로반환()함수는 함수 본문에서 발생하면 목록 객체. 갑태그목록()단순히 다음이 포함된 목록입니다. 요소가 다음과 같은지 식별하는 추가 속성 HTML 태그.

    우리 렌더링 기능 내에서 제목을 설정하고 기본값오픈스트리트맵타일과 우리 식물을 위한 몇 가지 마커.

    참고:

    구문~lngp여기 보이는 것은 간단히 말해서데이터$lngp- 파이프 연산자a(x) %>% b(y)a 약칭tmp <- a(x); b(tmp, y)

    지금 앱을 실행하면 다음과 같은 지도를 볼 수 있습니다. 지정한 식물 좌표의 마커 메가 슬롯 세트에 포함하세요.lngp그리고latp. 마커 위에 마우스를 올리면 에서 정의한 식물의 이름을 볼 수 있습니다. 설정:식물. 스크린샷을 보실 수 있습니다 아래 결과:
    맞춤 렌더러 결과 - 마커가 있는 지도

    이 시점까지 읽으셨다면, 다음을 눈치채셨을 것입니다. 렌더러 함수에 우리가 수행한 매개변수가 있습니다. 아직 얘기 안 했어요:rendererEnv. 이 매개변수는 지속적인 정적 R 환경입니다. 렌더러 함수에 대한 다양한 호출을 통해. 각각 위젯의 데이터가 업데이트되는 시간(예: 사용자가 데이터베이스에서 새 시나리오를 로드하는 경우) 렌더러 함수가 호출됩니다. 이것이 가능한 한 가지 사례 문제가 되는 것은 다음을 사용할 때입니다.관찰자렌더러 기능에서. 렌더러가 작동할 때마다 함수가 호출되면 모든 관찰자가 다시 등록됩니다. 이로 인해 관찰자가 중복됩니다. 이를 방지하려면 문제가 발생하면 관찰자가 정리되었는지 확인해야 합니다. 더 이상 필요하지 않을 때. 할당하여 이 작업을 수행합니다. 그들을rendererEnv환경. 이 경우의 예 광범위하게 사용되는 모델입니다tsp, MIRO 모델 라이브러리에서 찾을 수 있습니다.

    이제 시작하는 데 필요한 모든 것을 알게 되었습니다. 나만의 맞춤형 렌더러를 작성해보세요! 축하해요! 에서 원하는 새 렌더러를 만드는 경우 다른 사람들도 당신의 작업으로부터 혜택을 받을 수 있도록 공유하세요. 제발문의하기!

    추가 데이터세트

    맞춤 렌더러는 다른 메가 슬롯 기호의 데이터를 사용할 수 있습니다 (출력 심볼의 렌더러는 다음의 데이터를 사용할 수 있습니다. 입력 및 출력 기호 모두에 대한 렌더러 입력 기호는 다른 입력 기호에만 액세스할 수 있습니다. 에 대한 예 - 위의 지도 예를 계속 사용하겠습니다. 지리적 정보는 다른 기호에서 나올 수 있습니다. 운송 데이터보다 사용자 정의 렌더러가 액세스하려면 이 데이터에 해당 기호를 지정해야 합니다.<모델 이름>.json메가 슬롯 아래"추가데이터":

    "데이터렌더링":
          "optSched":
             "outType":"mirorenderer_optsched",
             "높이":"700",
             "옵션":
                "title":"최적의 운송 일정"
             ,
             "추가 데이터": ["symbol_a", "symbol_b"]
    데이터개체를 사용할 수 있습니다 사용자 정의 렌더러 내의 데이터에 액세스합니다. 그것은 될 것이다 이름이 지정된 티블 목록. 예를 들어, 액세스하려면symbol_a, 사용데이터[[symbol_a]]액세스하려면 특정 티블.
    참고:

    사용자 정의 렌더러가 사용해야 하는 모든 기호는 다음과 같아야 합니다. 메가 슬롯/MIRO에 포함됨데이터 계약.

    참고:

    사용자 정의 렌더러는 항상 전체를 수신합니다.필터링되지 않음데이터.

    추가 R 패키지

    사용자 정의 렌더러에는 다음과 같은 R 패키지를 포함할 수 있습니다. MIRO의 일부가 아닙니다. 이를 통해 모든 데이터를 사용할 수 있습니다. R.In의 시각화 및 데이터 처리 기능 시작할 때 해당 패키지를 설치하는 순서 MIRO 애플리케이션은 다음 항목에 지정되어야 합니다.<모델 이름>.json메가 슬롯 위치 아래의 해당 기호 구성"패키지":

    "데이터렌더링":
          "optSched":
             "outType":"mirorenderer_optsched",
             "높이":"700",
             "옵션":
                "title":"최적의 운송 일정"
             ,
             "additionalData": ["symbol_a", "symbol_b"],
             "패키지": ["패키지_a", "패키지_b"]

    이러한 추가 패키지는 설치되었지만 설치되지 않았습니다. 로드되었습니다! 즉, 함수를 호출하면 를 사용하여 패키지 이름을 명시적으로 지정해야 합니다.이중 콜론 연산자:패키지::이름(...). 또한 참조하십시오.정보 상자이전 섹션에서.

    팁:

    추가 R 패키지는 다음 위치에 설치됩니다.작업공간48862_49000

    조회수

    렌더러가 대화형인 경우, 사용자가 현재 상태를 저장할 수 있도록 허용하고 싶습니다. 렌더러를 다운로드하고 나중에 한 번의 클릭으로 로드할 수 있습니다. 이것은 뭐MIRO 조회수설계되었습니다. MIRO 뷰는 다음을 수행할 수 있습니다. JSON 직렬화 가능한 (중첩) 목록이어야 합니다. 조회수는 특정 메가 슬롯 기호에 바인딩되어 있으며 각 보기에는 고유 아이디. MIRO가 보는 렌더러의 한 예 사용되는 API는 다음과 같습니다.피벗 테이블렌더러.

    당신은 이미 다른 것이 있다는 것을 보았을 것입니다. 우리가 아직 가지고 있지 않은 렌더러 함수의 인수 이야기된 내용: the조회인수. 이것은 뷰 R6 클래스의 인스턴스에 대한 참조입니다. 당신은 할 수 있습니다 뷰 가져오기, 추가, 제거 및 콜백 등록 이 개체를 통해. 다음 섹션에서는 방법을 설명합니다. API를 사용하세요.

    뷰 데이터 가져오기
    views$get(세션, id = NULL, 필터 = c("all", "global", "local"))
    인수
    세션 세션객체가 사용자 정의에 전달되었습니다. 렌더러 또는 메가 슬롯 기호 이름
    id 로드할 뷰의 ID
    필터 앱 전체 검색 여부글로벌보기 전용, 시나리오별로컬조회만 또는모두조회수.

    경우에 따라idisNULL: 명명된 목록 여기서 이름은 뷰의 ID와 값입니다. 뷰 데이터입니다.

    경우에 따라id아닙니다NULL: 다음이 포함된 목록 뷰의 데이터. 클래스 오류가 발생합니다.error_not_foundid의 경우 제공된 항목이 존재하지 않습니다.

    설명

    이 방법을 사용하면 보기 데이터를 검색할 수 있습니다 심볼로 등록되었습니다. 다음 중 하나를 검색할 수 있습니다. 모든 조회수 데이터(idisNULL) 또는 특정 뷰의 데이터(id아님NULL).

    # myViews- list(filter1 = list(filter = list(element1 = "Value 1", element2 = c("Value 2", "Value 4"))),
    #                 filter2 = list(filter = list(element3 = "Value 7")))
    
    views$get(session, "filter1")
    #> $filter
    #> $filter$element1
    #> [1] "Value 1"
    #>
    #> $filter$element2
    #> [1] "Value 2" "Value 4"
    
    views$get(session)
    #> $filter1
    #> $filter1$filter
    #> $filter1$filter$element1
    #> [1] "Value 1"
    #>
    #> $filter1$filter$element2
    #> [1] "Value 2" "Value 4"
    #>
    #>
    #>
    #> $filter2
    #> $filter2$filter
    #> $filter2$filter$element3
    #> [1] "Value 7"
    
    views$get(session, "filter3")
    #>오류: ID가 filter3인 보기를 찾을 수 없습니다.
    뷰 ID 가져오기
    views$getIds(session, filter = c("all", "global", "local"))
    인수
    세션 세션객체가 사용자 정의에 전달되었습니다. 렌더러 또는 메가 슬롯 기호 이름
    필터 앱 전체 검색 여부글로벌보기 전용, 시나리오별현지조회만 또는모두조회수.

    에 등록된 보기 ID가 있는 문자 벡터 기호.

    설명

    현재 등록된 보기 ID를 검색합니다. 상징. 이는 다음과 같습니다.이름(views$get(세션)).

    # myViews- list(filter1 = list(filter = list(element1 = "Value 1", element2 = c("Value 2", "Value 4"))),
    #                 filter2 = list(filter = list(element3 = "Value 7")))
    
    views$getIds(session)
    #>[1] "필터1" "필터2"
    보기 추가
    views$add(세션, id, viewConf)
    인수
    세션 세션객체가 사용자 정의에 전달되었습니다. 렌더러 또는 메가 슬롯 기호 이름
    id 추가할 뷰의 ID
    viewConf 보기 구성
    설명

    새 보기를 추가/등록합니다. 보기 구성은 다음과 같습니다. 모든 JSON 직렬화 가능 목록. 동일한 ID를 가진 뷰인 경우 해당 기호에 대해 이미 존재하는 경우 이전 보기는 다음과 같습니다. 교체되었습니다. 현재 렌더러가 읽기 전용인 경우( 샌드박스 시나리오), 클래스 오류error_readonly이 발생합니다. 당신 렌더러가 읽기 전용인지 여부를 테스트할 수 있습니다. 방법views$isReadonly(세션).

    # myViews- list(filter1 = list(filter = list(element1 = "Value 1", element2 = c("Value 2", "Value 4"))),
    #                 filter2 = list(filter = list(element3 = "Value 7")))
    
    views$add(session, "filter3", list(filter = list(element4 = "Value 10")))
                                            
    보기 제거
    views$remove(세션, ID)
    인수
    세션 세션객체가 사용자 정의에 전달되었습니다. 렌더러 또는 메가 슬롯 기호 이름
    id 제거할 뷰의 ID
    설명

    지정된 ID를 가진 로컬 보기를 제거합니다. 전망이 없다면 이 ID가 존재합니다. 클래스 오류입니다.error_not_found이 발생합니다. 에서 현재 렌더러가 읽기 전용인 경우(샌드박스가 아님) 시나리오), 클래스 오류error_readonly이 발생합니다. 당신 렌더러가 읽기 전용인지 여부를 테스트할 수 있습니다. 방법views$isReadonly(세션). 전역 보기는 제거할 수 없습니다.

    # myViews- list(filter1 = list(filter = list(element1 = "Value 1", element2 = c("Value 2", "Value 4"))),
    #                 filter2 = list(filter = list(element3 = "Value 7")))
    
    views$get(session)
    #> $filter1
    #> $filter1$filter
    #> $filter1$filter$element1
    #> [1] "Value 1"
    #>
    #> $filter1$filter$element2
    #> [1] "Value 2" "Value 4"
    #>
    #>
    #>
    #> $filter2
    #> $filter2$filter
    #> $filter2$filter$element3
    #> [1] "Value 7"
    
    views$remove(session, "filter2")
    
    views$get(session, "filter1")
    #> $filter
    #> $filter$element1
    #> [1] "Value 1"
    #>
    #> $filter$element2
    #> [1] "Value 2" "Value 4"
    
    views$remove(session, "filter2")
    #>오류: ID가 filter2인 보기가 존재하지 않으므로 제거할 수 없습니다.
    업데이트 콜백 등록
    views$registerUpdateCallback(세션, 콜백)
    인수
    세션 세션개체가 사용자 정의에 전달되었습니다. 렌더러 또는 메가 슬롯 기호 이름
    콜백 콜백 함수
    설명

    트리거되는 콜백 함수를 등록할 수 있습니다 기호의 보기 데이터가 수정될 때마다외부렌더러. 이는 사용자가 를 통해 뷰 데이터를 수정합니다.메타데이터 대화상자. 콜백 함수는 다음에 의해 트리거되지 않습니다. 방법조회$추가또는조회$제거설명됨 위.

    업데이트콜백- function(){
      print(sprintf("View data changed from outside! New view ids: %s.",
                    views$getIds(session)))
    }
    
    views$registerUpdateCallback(session, updateCallback)
                                            

    첨부메가 슬롯

    사용자 정의 렌더러 및 사용자 정의 입력 위젯이 액세스할 수 있음 기존첨부메가 슬롯그리고 새로운 것을 추가하세요. 예를 들어, 귀하의 모델이 실행은 특정 애착의 존재에 따라 달라집니다. 사용자는 맞춤 위젯에서 힌트를 볼 수 있습니다. 이 첨부 메가 슬롯이 이미 존재하는지 여부입니다. 게다가, 해당 업로드 필드가 표시될 수 있습니다. 누락된 첨부 메가 슬롯을 추가하는 데 사용됩니다. 이것은 단지 많은 것 중 하나일 뿐이다. 첨부 메가 슬롯 인터페이스가 제공하는 가능성. 첨부 메가 슬롯은 MIRO 시나리오에 바인딩되며 각 첨부 메가 슬롯에는 고유 ID가 있습니다.

    첨부 메가 슬롯을 검색, 다운로드, 추가 및 검색할 수 있습니다. 다음을 통해 제거되었습니다.첨부메가 슬롯맞춤 렌더러의 인수 기능. 와 마찬가지로조회수인수, 이것은 첨부 메가 슬롯 R6 클래스의 인스턴스에 대한 참조입니다. 다음 섹션에서는 API 사용 방법을 설명합니다.

    첨부메가 슬롯 ID 가져오기
    첨부 메가 슬롯$getIds()

    다음의 일부인 첨부 메가 슬롯 ID가 포함된 문자 벡터 샌드박스 시나리오.

    설명

    현재 첨부 메가 슬롯 ID를 검색합니다. 시나리오에 등록했습니다.

    
    attachments$getIds()
    #>[1] "file1.txt" "file2.gdx" "file3.xls"
    첨부메가 슬롯 추가
    attachmenets$add(session, filePaths, fileNames = NULL, 덮어쓰기 = FALSE, execPerm = NULL)
    인수
    세션 세션객체가 사용자 정의에 전달되었습니다. 렌더러 또는NULLa에서 사용되는 경우맞춤 데이터 커넥터
    메가 슬롯 경로 데이터를 읽을 메가 슬롯 경로가 포함된 문자 벡터
    메가 슬롯 이름 메가 슬롯의 사용자 정의 이름(선택 사항)
    덮어쓰기 기존 메가 슬롯 여부를 지정하는 부울 덮어써야 합니다
    execPerm 실행 권한이 있는 벡터(NULL이거나 와 길이가 같은 논리형 벡터메가 슬롯 경로). 기본적으로 모든 메가 슬롯에는 실행 권한을 부여합니다.
    설명

    새 첨부 메가 슬롯을 추가/등록합니다. 다음의 메가 슬롯일 수 있습니다. 로컬 메가 슬롯 시스템, 렌더러에서 생성된 메가 슬롯 자체, REST API 호출 또는 기타에서 액세스되는 메가 슬롯 다른 사람. 첨부 메가 슬롯을 새 이름으로 저장할 수 있습니다. 만약 같은 이름의 첨부 메가 슬롯이 이미 존재합니다. 덮어썼습니다. 또한, 첨부 메가 슬롯은 다음과 같습니다.기본 메가 슬롯 모델로 읽기. 현재 렌더러가 읽기 전용인 경우( 샌드박스 시나리오), 클래스 오류error_readonly이 던져졌습니다. 당신 렌더러가 읽기 전용인지 여부를 테스트할 수 있습니다. 방법첨부 메가 슬롯$is읽기 전용(세션). 첨부 메가 슬롯은 최대 크기를 초과할 수 없습니다.50MB. 초과하는 첨부메가 슬롯을 추가한 경우 이 크기는 오류입니다.error_max_size클래스가 상승했습니다. 또한 최대20첨부메가 슬롯은 시나리오별로 추가됩니다. 이 한도를 초과하면 수업 오류error_max_no이다 던져졌다. 이미 존재하는 이름의 시나리오가 있는 경우 추가됨, 오류가 발생했습니다.error_duplicate_files클래스는 제기되었습니다.

    아래 예에서는 첨부 메가 슬롯이 다음을 사용하여 추가됩니다. 반짝이는메가 슬롯입력사용자가 업로드할 때 관찰자를 트리거하는 위젯 로컬 메가 슬롯.

    observeEvent(input$fileInput, 
      메가 슬롯- input$fileInput
      filePath - file$datapath
      attachments$add(session, filePath, "custom_attachment.txt", overwrite = TRUE, execPerm = FALSE)
    })
    
    attachments$getIds()
    #>[1] "custom_attachment.txt"
    첨부메가 슬롯 저장
    attachments$save(filePaths, fileNames, overwrite = TRUE)
    인수
    메가 슬롯 경로 메가 슬롯을 저장할 문자 벡터. 둘 중 하나 디렉터리 이름 또는 디렉터리 + 메가 슬롯 이름( 후자의 경우 길이는메가 슬롯 이름반드시 1)이 됩니다.
    메가 슬롯 이름 메가 슬롯 이름이 포함된 문자 벡터 다운로드
    덮어쓰기 기존 메가 슬롯을 덮어쓸지 여부.
    설명

    주어진 위치에 메가 슬롯을 저장합니다. 사용자가 해야 할 경우 사용자 정의에서 직접 첨부 메가 슬롯을 다운로드할 수 있습니다. 렌더러는 다음을 사용하여 가능합니다.저장방법. 또한 액세스하는 데 사용할 수 있습니다. 사용자 정의 렌더러의 첨부 메가 슬롯 데이터 및 추가로 처리하세요. 이를 위해 첨부 메가 슬롯은 다음과 같습니다. 디스크에 저장하고 거기에서 읽을 수 있습니다.

    아래 예에서, a다운로드 핸들러첨부메가 슬롯을 작성하는 데 사용됩니다.메가 슬롯.txt디스크에. 만약메가 슬롯.txt첨부메가 슬롯에서 찾을 수 없습니다. an오류.txt메가 슬롯이 대신 다운로드됩니다.

    출력$다운로드버튼- downloadHandler(
      filename = function(){
        if(!"file.txt" %in% attachments$getIds()){
          return("error.txt")
        }
        return("file.txt")
      },
      content = function(file){
        if(!"file.txt" %in% attachments$getIds()){
          return(writeLines("error", file))
        }
        attachments$save(file, "file.txt")
      }
    )
                                            
    실행 권한 설정
    attachments$setExecPerm(session, fileNames, execPerm)
    인수
    세션 세션객체가 사용자 정의에 전달되었습니다. 렌더러 또는NULLa에서 사용하는 경우맞춤 데이터 커넥터
    메가 슬롯 이름 메가 슬롯 이름의 벡터
    execPerm 논리적 벡터(동일한 길이메가 슬롯 이름75735_75863
    설명

    특정 항목에 대한 읽기/실행 권한을 설정합니다. 첨부 파일. 허용한 모든 파일은 읽을 모델을 먼저 작업 폴더에 다운로드해야 합니다. 메가 슬롯가 실행되기 전 디렉토리입니다. 그러므로 바람직하다 실제로 읽기 가능한 파일만 선택하려면 최적화 실행과 관련이 있습니다.

    
    attachments$getIds()
    #>[1] "file1.txt" "file2.gdx" "file3.xls"
    
    attachments$setExecPerm(session, "file1.txt", execPerm = TRUE)
    첨부메가 슬롯 제거
    attachments$remove(session, fileNames, RemoveLocal = TRUE)
    인수
    세션 세션객체가 사용자 정의에 전달되었습니다. 렌더러 또는NULLa에서 사용하는 경우맞춤 데이터 커넥터
    메가 슬롯 이름 제거할 첨부 메가 슬롯의 메가 슬롯 이름
    removeLocal 디스크에서 메가 슬롯을 제거할지 여부
    설명

    지정된 메가 슬롯 이름을 가진 첨부 메가 슬롯을 제거합니다. 만약에 이 이름을 가진 첨부 메가 슬롯이 없습니다. 클래스 오류입니다.error_not_found이 던져졌습니다. 에서 현재 렌더러가 읽기 전용인 경우(샌드박스가 아님) 시나리오), 클래스 오류error_readonly이 발생합니다. 당신 렌더러가 읽기 전용인지 여부를 테스트할 수 있습니다. 방법첨부 메가 슬롯$isReadonly(세션).

    
    attachments$getIds()
    #> [1] "file1.txt" "file2.gdx" "file3.xls"
    
    attachments$remove("file1.txt", removeLocal = FALSE)
    
    attachments$getIds()
    #>[1] "file2.gdx" "file3.xls"

    메타데이터

    뷰 및 첨부 메가 슬롯 외에도맞춤 데이터 가져오기/내보내기이름, 소유자 및 태그.

    상호작용메타데이터객체 작동 목록처럼 (다음으로 구현됨)R6 활성 바인딩). 시나리오와 같은 속성을 얻으려면이름, 하위 집합 연산자를 사용합니다(예:메타데이터$이름). 설정하려면 속성을 지정하려면 할당 연산자를 사용하세요(예:메타데이터$이름 <- "테스트"시나리오 이름을 다음으로 설정합니다테스트). 사용 가능한 속성은 아래에 나열되어 있습니다.

    시나리오 이름 가져오기/설정
    메타데이터$이름
    메타데이터$이름 <- "테스트"
    설명

    샌드박스 시나리오의 이름을 검색/설정합니다. 던지기 클래스가 있는 조건error_bad_name잘못된 할당을 시도할 때 이름(공백만 포함하거나 64자 이상) 문자 길이).

    시나리오 태그 가져오기/설정
    메타데이터$태그
    메타데이터$태그 <- c("tag1", "tag2")
    설명

    샌드박스 시나리오의 태그를 검색/설정합니다. 던지기 클래스가 있는 조건error_bad_tags잘못된 태그를 할당하려고 할 때 (공백만 포함하는 태그 또는 누적 모든 태그의 문자 수가 1000자를 초과합니다.

    시나리오 수정 시간 가져오기/설정
    메타데이터$마지막 수정됨
    메타데이터$lastModified <- Sys.time()
    설명

    마지막 수정 시간을 검색/설정합니다. 던지기 조건 수업과 함께error_bad_time하려고 할 때 하위 클래스가 아닌 개체를 할당합니다.POSIXct

    시나리오 소유자 가져오기(읽기 전용)
    메타데이터$소유자
    설명

    시나리오 소유자의 이름을 검색합니다. 던지기 클래스가 있는 조건error_locked시도할 때 새로운 가치를 부여합니다.

    MIRO 1.x에서 렌더러 마이그레이션

    MIRO 1.x로 생성한 사용자 정의 렌더러는 또한 MIRO 2.0과 함께 작동합니다. 다음과 같은 경우에만 문제가 발생합니다. 구성 모드에서 이러한 렌더러를 사용해 보십시오. 기존 렌더러를 MIRO 2.0의 구성 모드에서는 규칙을 따라야 합니다. 아래:

    • 렌더러는 이제 특정 기호에 바인딩됩니다.
    • 렌더러는 다른 기호로 공유될 수 있지만 항상 그 중 하나에 속합니다.
    • 이것은 출력 및 렌더러의 이름을 의미합니다 함수는 다음과 같아야 합니다.mirorenderer_<symbolName>출력그리고renderMirorenderer_<symbolName>각각.
    • 렌더러 메가 슬롯의 이름을 지정해야 합니다mirorenderer_<기호 이름>.R.
    • 하나의 출력/렌더링 함수만 선언될 수 있습니다. 메가 슬롯.

    범위가 있는 위젯

    팁:

    범위가 있는 위젯은 다음에 대해서만 사용할 수 있습니다. 이중 대시 매개변수!

    우리는 위젯을 사용하는 방법에 대한 기본 사항을 다루었습니다. 스칼라 입력 및 명령줄 매개변수. 하자 이제 위젯이 두 개의 스칼라를 반환하는 방법을 살펴보겠습니다. 대신에 치료를 받습니다. 해당 위젯에는 두 개의 핸들이 있는 슬라이더(슬라이더라고도 함) 범위) 및 기간 선택기:

    낮은 값(또는 날짜 범위의 시작 날짜)은 다음과 같습니다. 로 접미어가 붙음_lo및 상위 값(또는 종료 날짜 범위의 날짜) 뒤에는이 붙습니다._up. 즉, 슬라이더 범위를 지정한 경우 이중 대시 매개변수--범위, 액세스할 수 있습니다. 범위의 하한값%RANGE_LO%및 상위 값%RANGE_UP%그동안%RANGE%하지 않을 것이다 전혀 설정되지 않습니다. 다음 예를 살펴보겠습니다. 가져오려는 기간을 지정하고 싶습니다. 주식 데이터. 따라서 우리는 새로운 이중 대시를 정의합니다. 매개변수--TW시각화되기를 원하는 것 날짜 범위 선택기 형태로 제공됩니다. 우리는 JSON 스니펫을 따라 우리의<모델 이름>.json구성 메가 슬롯:

    "inputWidgets": 
        "_gmspar_TW": 
           "alias": "시간 창",
           "widgetType": "날짜 범위",
           "label": "시간 창",
           "시작": "2018-02-20",
           "끝": "2019-02-20",
           "분": "2017-01-01",
           "최대": "2019-12-31",
           "autoclose": 사실,
           "noHcube": 사실
        ,
        [...]

    우리 모델에서는 다음의 하한값과 상한값에 접근할 수 있습니다. 컴메가 슬롯 시간 변수를 통한 이 슬라이더%TW_LO%그리고%TW_UP%.

    위젯 간 종속성

    MIRO를 사용하면 슬라이더의 한계도 설정할 수 있습니다 다른 데이터의 드롭다운 위젯 선택 기호.

    예는 다음과 같습니다픽스톡모델. 여기서는 포트폴리오에 선택할 수 있는 주식 수 데이터세트의 주식 수보다 커서는 안 됩니다. 마찬가지로, 훈련에 사용할 수 있는 일수 모델은 보유 일수보다 클 수 없습니다. 주가 데이터세트에서 슬라이더 속성 - 즉, 선택할 수 있는 최대값입니다. 사용자가 업로드하는 가격 데이터에 따라 변경됩니다. 따라서 여기에도 순방향 종속성이 있습니다.

    참고:

    더 정교한 종속성을 위해(예: 조건부 드롭다운 값을 기준으로 테이블 필터링 메뉴 등) 사용맞춤 입력 위젯.

    JSON 메가 슬롯을 통한 구성

    MIRO 구성은 주로 하나의 JSON을 통해 수행됩니다. 메가 슬롯. MIRO 앱을 처음 시작한 후 다음 메가 슬롯은 다음 위치에 있습니다.<모델 디렉토리>/conf_<모델 이름&gt:

    1. <모델명>_io.json
      이것은메가 슬롯설명데이터 계약MIRO와 메가 슬롯 사이에 있으며 자동으로 생성됩니다. MIRO가 실행될 때마다개발 모드. 메가 슬롯 모델에 표시된 모든 메가 슬롯 기호 와 함께$onExternalInput / $offExternalInput그리고$onExternalOutput / $offExternalOutput태그가 여기에 나열됩니다. 절대로 수정할 필요가 없습니다. 이 메가 슬롯!
    2. <모델 이름>.json
      MIRO의 모든 구성은 이 JSON에서 이루어집니다. 메가 슬롯(예:transport.json. 당신이 사용할 때 앱을 구성하기 위한 구성 모드, 이 메가 슬롯 자동으로 생성 및 수정됩니다. 여기에서 할 수 있습니다 MIRO의 일반적인 모양을 사용자 정의하고 설정합니다. 기호별 옵션, 기능 조정 및 훨씬 더. 게다가 모든 그래픽과 위젯은 여기에 지정되어 있습니다. 버전 제어를 사용하는 경우 Git과 같은 시스템에서는 이 메가 슬롯을 체크인하여 유지해야 합니다. 구성에 대한 모든 변경 사항을 추적합니다. 앱.
    참고:

    메가 슬롯 Studio를 통해 MIRO를 시작하지 않고 명령줄에서는 JSON 파일이 생성되지 않습니다. 자동으로. 이에 대해 자세히 알아보세요.여기.

    맞춤 시각화 옵션

    MIRO의 모양을 변경하려는 경우 또는 스칼라 입력 기호를 슬라이더로 표시합니다. 정보는에 저장되어야 합니다.<모델 이름>.json메가 슬롯 JSON 구문. 새로운 모델의 MIRO를 처음 출시할 때,<모델 이름>.json메가 슬롯 거의 비어 있습니다:

    {}

    당신이 만들고 싶은 각 조정은 다음에 캡처되어야 합니다. 이 메가 슬롯의 중괄호입니다.

    구성이 올바른지 확인하려면 구문 및 콘텐츠에 대해 모든 JSON 메가 슬롯의 유효성이 검사됩니다. 백그라운드의 스키마. 유효성 검사가 있는 경우에만 성공적으로 응용 프로그램이 시작됩니다. 스키마가 다음과 같은 경우 위반하면 오류 메시지가 표시됩니다.
    스키마는 다음 위치에 있습니다.<MIRORoot>/miro/conf. 에 대한<모델명>_io.json이것 스키마입니다<MIRORoot>/miro/conf/io_config_schema.json그리고<모델 이름>.json스키마<MIRORoot>/miro/conf/config_schema.json사용됩니다. 후자의 메가 슬롯이 구성에서는 해당 스키마만 관심. 살펴보실 수 있습니다.여기.

    팁:

    위젯 및 차트 구성 섹션에서, 구성에 대한 예도 찾을 수 있습니다. JSON과 같습니다.

    예: 테이블

    다시 돌아가 데모 모델을 확장하자운송. 메가 슬롯을 조정하여 이 작업을 수행하겠습니다.transport.json하기 위해서는 MIRO를 우리의 필요에 맞게 조정하세요.

    메가 슬롯 MIRO에는 먹이를 주는 방법에 대한 몇 가지 옵션이 있습니다. 당신의모델입력 데이터 포함. 기본적으로 메가 슬롯 입력 매개변수는 다음을 설정합니다. 스칼라는 편집 가능한 테이블에 표시됩니다.

    편집 가능한 테이블

    해당 메가 슬롯 선언문은 다음과 같습니다. 이:매개변수 d(i,j) '거리(천 단위) 마일';. 기본적으로 표의 모든 셀은 편집 가능하며 행을 삽입하고 제거할 수 있습니다. 당신이 원한다면 사용자가 특정 테이블을 편집하도록 허용하거나 심지어 테이블 내의 특정 열을 사용자 정의할 수 있습니다. 기본 메가 슬롯 매개변수에 대한 시각화. 당신은 그래서 이런 종류의 정보를transport.json메가 슬롯. 에 대한 예를 들어, 매개변수에 대한 테이블을 결정하면d편집할 수 없습니다. 이것은 정보를 JSON 메가 슬롯에 다음과 같이 추가해야 합니다. 다음과 같습니다:

    "inputWidgets": 
        "d": 
          "widgetType": "테이블",
          "읽기 전용": 사실

    예: 스칼라

    우리의 이야기로 돌아가자운송앱. 에서이전 섹션매개변수 테이블을 구성했습니다d그래서 그것은 더 이상 편집 가능. 우리는 해당하는 글을 작성하여 이를 달성했습니다. 정보를transport.json메가 슬롯. 이제 우리는 추가하여 앱 구성을 더욱 확장합니다. 스칼라 값을 표시하는 방법에 대한 정보f('1,000마일당 케이스당 화물(달러)'). 테이블에 표시하는 대신 다음을 사용하고 싶습니다. 에슬라이더:

    "inputWidgets": 
        "d": 
          "widgetType": "테이블",
          "읽기 전용": 사실
        ,
        "f": 
          "widgetType": "슬라이더",
          "alias": "1,000마일당 케이스당 운임(달러)",
          "label": "운송비를 선택하세요",
          "최소": 1,
          "최대": 500,
          "기본값": 90,
          "단계": 1

    앱을 다시 시작하면 이제 스칼라가 자동으로 에서 삭제됨스칼라테이블 그리고 대신 별도의 위젯으로 렌더링됨:

    스칼라 값을 위한 입력 위젯

    다음 섹션에서위젯그리고차트JSON을 찾을 수 있습니다 각 위젯 또는 차트 유형에 대한 예입니다.

    명령줄 매개변수

    우리는 이미 가능성에 대해 언급했습니다.MIRO를 통해 메가 슬롯 명령줄 매개변수 설정. 이후메가 슬롯 옵션그리고이중 대시 매개변수메가 슬롯의 명령줄을 통해 지정되지만, 메가 슬롯 코드에 다음과 같은 태그가 지정되어야 합니다.$onExternalInput / $offExternalInput. 받는 사람 MIRO에서 설정할 수 있으며 다음에서 지정할 수 있습니다.<모델 이름>.json파일. 에서 MIRO가 귀하의 기호가 이중 대시 매개변수 또는 메가 슬롯 옵션의 경우 접두사를 붙여야 합니다. 기호 이름 중 하나_gmspar_용 이중 대시 매개변수 또는_gmsopt_메가 슬롯용 옵션.

    참고:

    메가 슬롯 옵션과 이중 대시 매개변수 모두 가능합니다. 슬라이더, 드롭다운 메뉴, 체크박스, 텍스트로 표시됩니다. 입력 또는 숫자 입력. 이중 대시 매개변수의 경우 날짜(범위) 선택기와 슬라이더 범위도 가능합니다.

    MIRO가 다음과 같이 메가 슬롯 모델을 호출하기를 원한다고 가정해 보겠습니다. 이중 대시 매개변수--numberPeriods, 값으로 설정할 수 있음 1에서 14 사이입니다. 또한 사용할 MIP 솔버입니다. CPLEX, Gurobi에 대한 라이센스가 있으므로 및 XPRESS에서는 이 세 가지 중 하나만 사용할 수 있습니다. 해결사. 따라서 귀하의<모델 이름>.json메가 슬롯 다음과 같이 보일 수 있습니다:

    "inputWidgets": 
        "_gmspar_numberPeriods": 
          "widgetType": "슬라이더",
          "alias": "기간 수",
          "label": "해결할 기간 수를 선택하세요",
          "최소": 1,
          "최대": 14,
          "기본값": 11,
          "단계": 1
        ,
        "_gmsopt_mip": 
          "widgetType": "드롭다운",
          "alias": "MIP 솔버",
          "label": "MIP 모델에 사용할 솔버",
          "선택": [
            "씨플렉스",
            "구로비",
            "익스프레스"
          ],
          "다중": 거짓,
          "선택됨": "CPLEX"

    이제 MIRO의 결과 인터페이스는 다음과 같습니다:

    명령줄 매개변수에 대한 입력 위젯

    언어 메가 슬롯

    메가 슬롯 MIRO에는 기본 설정을 변경할 수 있는 기능이 있습니다. 언어. MIRO에서 선호하는 언어 결과 설정 모든 해당 언어 파일을 포함 언어별 구성 요소는 JSON을 통해 지정됩니다. 구문. MIRO는 현재 해당 언어 중 세 가지와 함께 제공됩니다. 파일: 영어, 독일어, 중국어. 당신이 원한다면 이 목록에 다른 언어를 추가하면 그 이상입니다. 기존 언어 파일 중 하나를 번역하는 것을 환영합니다. 언어 파일은 다음 위치에 있습니다.<MIRORoot>/miro/conf/en.json그리고 다음에 대해 검증됩니다JSON 스키마메가 슬롯:<MIRORoot>/miro/conf/언어_schema.json. 때로는 자리 표시자가 있는 경우도 있습니다. 언어 메가 슬롯. 오류 메시지를 살펴보겠습니다."슬라이더의 '%s' 값: '%s'은(는) 숫자가 아닙니다. 입력하세요."예를 들어.%s그런 다음 다음으로 대체됩니다. MIRO의 슬라이더 값과 이름입니다. 따라서 생성하면 새 언어 메가 슬롯을 만들려면 다음을 포함해야 합니다. 거기에 자리 표시자가 있어요!

    당신의 언어 메가 슬롯을 제공하고 싶다면, 다른 사람도 귀하의 작업으로 이익을 얻을 수 있다는 내용을 보내십시오. 이메일을 보내주세요:miro@메가 슬롯com.