Ready to learn about stringing everything together into an actual script?Ready to learn about stringing everything together into an actual script?Ready to learn about stringing everything together into an actual script?Ready to learn about stringing everything together into an actual script?모든 것을 실제 스크립트로 묶는 방법을 배울 준비가 되셨습니까? 스크립팅의 기초에 대한 시리즈에 다시 오신 것을 환영합니다. JMP . 이것은 함께 작업할 수 있도록 구성된 시리즈의 다섯 번째 항목입니다. 방금 우리와 함께하는 경우 시리즈 , 이것은 doozy이기 때문입니다. 검토할 수 있는 링크는 다음과 같습니다.
괜찮은? 아직도 여기에? 이전 에피소드를 보셨나요? 훌륭한! 영광을 향하여!
몇 주 전 숙제에서 우리는 모두 JSL 스니펫을 사용하여 스크립트 저장 스크립트 창으로 또는 스크립팅 인덱스를 사용하여 필요한 코드 조각을 얻습니다. 너 했다 너의 숙제를해라, 오른쪽 ? 좋은! 모든 것을 실제 스크립트로 묶는 작업을 시작하겠습니다. 하지만 먼저 약간의 대화가 필요합니다.
Mikey의 코딩 애완 동물 중 하나 오줌싸개
좋아요, 여러분. 잠시 동안 내 비누 상자에서 일어나서 뭔가에 대해 이야기하겠습니다. 우리는 코드를 작성할 때 반드시 언제나 코멘트! 우리는 우리 자신을 포함하여 우리 코드를 읽을 사람에 대해 어떤 가정도 할 수 없습니다.
대학에 돌아와서 Visual Basic 코딩 수업을 들었습니다. 우리가 처음 배운 것은 코드에 주석을 달고 의사 코드를 작성하는 방법이었습니다. 그나저나 의사 코드는 코드를 작성하기 전에 작성하여 수행해야 할 작업을 파악하는 데 도움이 되는 주석입니다. 그 첫 번째 게시물 ). 강사는 주석과 의사 코드를 "코딩 커뮤니티의 좋은 시민이 되는 것"이라고 불렀습니다. 제출한 코드에 대해 얼마나 잘 주석을 달았는지에 대해서도 등급을 매겼습니다. 그만큼 중요합니다.
문제의 진실은 코드를 보는 사람을 완전히 제어할 수 있는 경우가 거의 없다는 것입니다. 사례: 이 블로그 시리즈에서는 다른 사람의 추가 기능을 리버스 엔지니어링하는 방법에 대한 단계별 지침을 제공했습니다. 이러한 추가 기능을 작성한 사람들 중 일부(대부분은 아니더라도)는 다른 사람들이 자신의 코드를 들여다볼 것이라고 기대하지 않았음을 보장할 수 있습니다. 나는 또한 코드에서 원하는 만큼 무슨 일이 일어나고 있는지 파악하는 데 도움이 되는 주석을 많이 찾지 않을 것임을 보장할 수 있습니다.
나중에 코드를 보는 사람이 자신이 하는 일을 쉽게 이해할 수 있도록 코드에 주석을 달아야 합니다. 예, 댓글은 고통입니다. 그리고 네, 시간이 더 걸립니다. 하지만, 아니요 , 당신은 그것을 그냥 건너뛸 수 없습니다. 그것은 장기적으로 배당금을 지불할 것입니다. 그리고 나는 여기서 설교하는 것을 실천합니다. 5년 전에 작성한 추가 기능이 있는데 자세한 주석을 달았기 때문에 여전히 이해할 수 있습니다(얼마나 지루했는지 아직도 기억합니다!).
따라서 이미 코딩을 하고 있는 분들은 다른 사람이 자신이 하고 있는 일을 이해할 수 있도록 코드에 주석을 달아야 합니다. 배우고 있는 여러분은 습관을 들이고 코드에 주석을 많이 다는 습관을 유지하십시오. 이제 이 비누상자에서 내려와 방법을 보여드리겠습니다.
JSL에서 주석 달기
JMP를 열고 우리가 사용해 온 Big Class Families.jmp 데이터 테이블을 열어 보겠습니다. 마지막 세션에서 스크립트 예제를 저장하지 않은 경우 계속해서 다시 만드십시오. 다음과 같이 표시되어야 합니다.

JSL 코드에 주석을 추가하는 방법에는 두 가지가 있습니다. 첫 번째는 이중 슬래시("//")를 사용하여 개별 행을 주석 처리하는 것입니다. 캐리지 리턴(키보드에서 리턴 누르기)까지 슬래시 이후의 내용은 모두 무시됩니다. 저는 일반적으로 짧은 인라인 주석을 달 때 이 방법을 사용합니다. 실행하지 않으려는 코드 한 줄을 끄는 것도 유용합니다. 이것이 무엇을 의미하는지 살펴보겠습니다.

주석을 달 수 있는 두 번째 방법은 대규모 코드 블록을 끄거나 대규모 주석 및 텍스트 블록을 생성하려는 경우에 사용됩니다. 이러한 유형의 주석을 주석 블록이라고 합니다. 슬래시와 별표("/*")로 구성된 시작 주석 플래그와 별표와 슬래시("*/")로 구성된 닫는 주석 플래그를 사용하여 수행됩니다. 이것이 어떻게 사용될 수 있는지에 대한 예는 다음과 같습니다.

댓글을 다는게 아니니 참고하세요 스타일 여기. 그것은 실제로 당신에게 달려 있습니다. 진행하면서 자신만의 스타일을 개발하고 목적에 따라 다른 댓글 스타일을 가질 수도 있습니다. 내 인라인 주석(예제에 있는 것과 같은)은 응용 프로그램과 같은 것에서 수행하는 주석과 완전히 다릅니다. 요점은 주석을 작성하고 이를 수행하는 방법과 스크립트에서 내부적으로 일관성을 유지하는 것입니다.
이 전체 시리즈에서 가장 어려운 비트
실제로 이 전체 시리즈는 다음 항목으로 이어졌습니다. JSL을 시작하기 위해 알아야 할 세 가지 핵심 사항이 있습니다. 첫 번째는 주석을 다는 것입니다(이 기사 앞부분의 설교 참조). 두 번째와 세 번째는 사물의 이름을 짓는 방법 그리고 메시지를 보내는 방법 그들에게.
자신만의 ANOVA 알고리즘을 코딩하는 것이 가능하다고 생각합니다(내 동료가 그것에 대해 매우 재미있는 이야기를 합니다). 그러나 이전 에피소드에서 배운 것처럼 메시지를 통해 Fit Y by X를 사용하여 ANOVA를 실행하도록 데이터 테이블에 지시하는 것이 훨씬 쉽습니다. 그 기본 워크플로(무언가 이름 지정, 메시지 보내기)는 JSL에 관한 많은 것입니다. 예, 논리 및 루프, GUI 개발 등에 들어갈 수 있지만 무차별 대입 스크립팅에는 실제로 이름, 메시지 및 약간의 스크립팅 인덱스 검색만 필요합니다.
이름 짓기
이름을 지정하는 것부터 시작하겠습니다. 등호 뒤에 JMP에 이름을 붙인 다음 해당 이름이 나타낼 텍스트, 숫자, 코드 등을 작성하여 이름을 지정합니다. 이름은 ㄱ이라고 합니다 변하기 쉬운 . 변수를 내용을 담을 수 있는 컨테이너 또는 열려 있는 보고서의 별명으로 생각할 수 있습니다. JMP .
ANOVA를 사용하는 예를 살펴보겠습니다. ANOVA에 대한 코드를 생성하려면 먼저 Fit Y by X(Analyze 아래)에서 분석을 실행한 다음 ANOVA 테스트를 켠 다음 코드를 스크립트 창에 저장합니다. 다음은 Big Class Families.jmp를 사용한 보고서와 빨간색 삼각형 메뉴(키는 Y, 성별은 X, 평균/Anova/풀링된 t 빨간색 삼각형 아래) :


이 작은 JSL 스니펫은 원래 데이터 테이블과 동일한 열 이름을 가진 모든 데이터 테이블에 대해 ANOVA를 생성합니다. (그러나 이 시리즈에서는 매개변수화에 대해 걱정하지 않을 것입니다. 범위가 좀 멉니다.)
이제 많은 데이터 테이블이 열려 있고 ANOVA를 실행할 데이터 테이블을 제어하려면 어떻게 해야 할까요? ANOVA를 실행하려는 데이터 테이블에 이름을 지정한 다음 JMP 생성 코드를 메시지로 전송하여 스크립트를 편집할 수 있습니다. Scripting Index(도움 얻기 문서 참조)를 보면 몇 가지 방법을 찾을 수 있습니다. 데이터 테이블을 직접 호출하거나 Current Data Table()을 사용하여 JMP가 현재 집중하고 있는 데이터 테이블에 대한 참조를 가져올 수 있습니다. 데이터 테이블을 열 때 이름을 지정하는 좀 더 고급인 세 번째 옵션이 있습니다. 아래에 세 가지 모두의 예를 넣었습니다(정보를 전달하기 위해 주석을 사용하는 것에 다시 한 번 유의하십시오!).

이름으로 데이터 테이블을 호출하면 사용하려는 이름을 가진 데이터 테이블이 열려 있는 한 작동합니다. 이것은 작업할 데이터 테이블 이름 목록이 있는 경우에 유용할 수 있습니다. 데이터 테이블을 숨기거나 최소화한 경우에도 유용할 수 있습니다. 두 경우 모두 볼 수 없는 경우에도 데이터 테이블에 메시지를 보낼 수 있습니다. 이 방법은 다음 형식을 사용합니다.
<변수명> = Data Table(“<데이터 테이블명>”);
우리의 목적을 위해 변수를 데이터 테이블에 할당하는 가장 유용한 방법은 현재 데이터 테이블() 함수를 사용하는 것입니다. 이 함수는 활성 또는 현재 데이터 테이블을 가져와서 지정한 변수에 할당합니다. 테이블이 변수에 할당되면 다른 데이터 테이블이 "현재"가 되는 것은 문제가 되지 않습니다(예: 요약 테이블을 생성하면 변수를 재정의할 때까지 항상 첫 번째 데이터 테이블에 대한 참조를 갖게 됨). 다음과 같은 더 간단한 형식이 있습니다.
<변수명> = 현재 데이터 테이블();
마지막 방법은 누군가가 스크립트를 실행할 때 데이터 테이블이 열려 있지 않을 수 있다고 가정하려는 경우에 유용합니다. 이 방법을 사용하여 JMP는 사용자가 열려는 파일을 선택할 수 있는 파일 대화 상자를 생성합니다. 사용자가 선택을 확인하면 파일이 열리고 지정한 변수 이름이 할당됩니다. 이번에도 간단한 형식입니다.
<변수명> = Open();
사용하여 열려 있는(…); 파일 경로와 디렉토리 작업이 편하다면 이 방법도 유용할 수 있습니다. 다음과 같이 파일 경로를 괄호 안에 넣어 JMP에게 파일을 찾을 위치를 알려줄 수 있습니다.

또한 저는 a라는 것을 사용하고 있습니다. 경로 변수 에서 열려 있는(…); 문자열을 줄이는 명령입니다. 에 섹션이 있습니다. 스크립팅 가이드 .
메시지 보내기
이제 이름을 지정하면 메시지를 보낼 수 있습니다. 휴대폰으로 누군가에게 문자 메시지를 보내는 것과 유사하게 작동합니다. 문자를 보낼 때 가장 먼저 알아야 할 것은 받는 사람의 이름, 이메일 주소 또는 전화번호 등을 식별할 수 있는 것입니다. 메시징 앱에 입력한 다음 메시지를 보냅니다. Big Class ANOVA를 사용하여 수행하는 방법은 다음과 같습니다. 이 경우에 JMP가 파일을 열도록 요청하도록 약간의 재미를 드리겠습니다.

5행에서 시작하여 여기에서 보고 있는 내용을 풀어 보겠습니다. 가장 먼저 보게 되는 것은 명령을 내리려는 데이터 테이블의 변수 이름입니다. 우리가 문자를 보내거나 사람에게 지시를 내릴 때처럼 우리는 누구와 이야기하고 있는지 식별해야 합니다. 다음으로 두 개의 "미만" 기호(<<)가 있습니다. Glue Operator(;)에서 이와 같은 것을 이미 본 적이 있습니다. "<<" 기호는 메시지 연산자라고 합니다. 그것은 메시지 수신자가 다음에 오는 것이 메시지라는 것을 알게 합니다. 그 후 Oneway(…)라는 함수가 표시됩니다. 함수가 ANOVA 보고서를 생성하는 데 필요한 인수와 함께. 참고: 설명서나 스크립팅 인덱스에서 해당 기능에 대한 옵션에 대한 모든 정보를 얻을 수 있지만 실제로 길게 작성할 필요는 없습니다. 분석을 한 번만 실행하고 다음 중 하나를 사용하여 완성된 스크립트(모든 옵션 포함)를 가져옵니다. 다음 위치에 스크립트 저장... 이전에 보여드린 명령입니다.
약간의 잡동사니
좋아, 해결해야 할 세 가지 마지막 세부 사항이 있습니다. 첫 번째는 사물을 하나로 묶는 문제입니다. 예를 들어 분산 분석을 수행하고 동일한 스크립트에서 그래프 빌더를 생성하려는 경우 추가 지침을 따르도록 JMP에 경고해야 합니다. 이렇게 하려면 내가 계속 언급하는 글루 연산자(;)를 사용하십시오.

영어 문어의 세미콜론과 마찬가지로 명령 끝에 있는 세미콜론은 JMP에 추가 명령이 있음을 알립니다. Glue는 Bivariate(...)와 같은 명령의 끝에 있습니다. ; , 또는 배포(...) ; , 또는 무언가에 이름을 부여: stuff = 5 + 6 ; . 이전 게시물에서 기억할 수 있듯이 JMP는 다음을 사용할 때 자동으로 세미콜론을 포함합니다. 스크립트 저장…스크립트 창으로 , 하지만 손으로 직접 스크립팅할 때 스크립팅 중에 저지르는 가장 일반적인 오류는 접착하는 것을 잊는 것입니다.
두 번째 세부 사항은 스크립트가 JMP 세션에서 좋은 시민이 되도록 하는 것입니다. 이것은 생성한 모든 변수를 네임스페이스 . 네임스페이스는 생성한 변수 이름이 소프트웨어의 다른 부분을 방해하지 않도록 하는 작은 샌드박스입니다. 기본 네임스페이스는 "Here" 네임스페이스라고 합니다. 스크립트에서는 다음과 같습니다(2행 참조).

이 명령은 변수 이름이 다른 스크립트 또는 JMP의 일부와 충돌하지 않도록 항상 스크립트의 시작 부분에 있어야 합니다(사용하지 않는 경우를 알 때까지!). 이 시점에서 머리카락을 뽑기 시작하기 전에 제가 방금 말한 내용의 TL;DR 버전이 있습니다. 항상 "Names Default To Here(1)"를 입력해야 합니다. 스크립트의 시작 부분에서 잠시 동안은 괜찮을 것입니다. 네임스페이스에 대해 자세히 알아보려면 항목에 대한 단락이 있습니다. 내가 얼마 전에 쓴 이 다른 게시물 .
논의해야 할 마지막 세부 사항은 저장된 스크립트에서 열 이름을 변경하는 방법입니다. 정말 간단합니다. 저장된 스크립트를 살펴보십시오. 열 이름 앞에 콜론(":")이 있어야 합니다. 콜론은 열 이름임을 나타냅니다(다른 것을 의미할 수도 있지만 지금은 열 이름을 의미함). 열 이름을 변경하려면 이름을 변경하면 됩니다. 단, 앞에 콜론을 붙여야 합니다. 열 이름에 특수 문자가 포함된 경우 JMP에서 스크립트를 출력할 때 :Name(“…”)과 같은 항목이 나타날 수 있습니다. 열 이름에 문자열의 일부라는 것이 명확하지 않은 경우 문제를 일으킬 수 있는 문자가 있다는 사실을 JMP가 처리하는 방식입니다. 스크립트에서 :Name(“…”)을 사용하는 것은 잘못된 코딩 형식이지만 소프트웨어는 선택의 여지가 없기 때문에 이를 사용하게 됩니다. 더 나은 열 이름을 선택해야 합니다.
하지만 잊으셨군요...
좋습니다. 여러분 중 일부는 이 시점에서 약간 경련을 일으키고 있다는 것을 알고 있습니다. "기능을 잊었군요!!!"라고 생각할 수 있습니다. 또는 "하지만 표현은 어떻습니까!!!" 또는 심지어 “당신은 TWIT!!! 당신은 논리와 루핑을 완전히 무시했습니다!” 우선 이름을 부르는 것은 좋지 않습니다. 둘째, 나는 그것을 하나도 잊지 않았다. 나 의식적으로 그것을 생략했다.
문제는 이 시리즈가 여러분의 머리카락을 뒤로 날리기 위한 것이 아니라는 것입니다. 시리즈 초반에 말했듯이 올바른 길을 안내하고, 좋은 지도와 간식을 주고, 등을 토닥여 주고, 어려움에 처했을 때 어디에서 도움을 구할 수 있는지 알려줍니다. 출발점입니다. (이 시점에서 간식을 먹을 수 있는 권한이 있습니다, btw.)
정기적으로 스크립트를 작성하는 사람들에게는 제가 여기서 이야기하는 많은 내용이 매우 기초적이고 기본적이어서 근육 기억에 관한 것입니다. 우리가 잊고 있는 것은 내가 여기서 다루는 기본 지식을 사용하는 것만으로도 초보 스크립터가 많은 영역을 다룰 수 있다는 것입니다. 어쨌든, 내가 너무 화려한 것을 다루지 않아서 과호흡을 하고 있다면 긴장을 푸세요. 우리는 다음 시리즈에서 토끼 구멍 아래로 내려갈 것입니다. 지금은 토론으로 돌아가서 이번 주 숙제에 대해 이야기해 봅시다.
숙제
좋습니다 – 여기 있습니다. 큰 숙제 운동. 이번 주에는 지난 주에 만든 코드 조각을 함께 붙일 것입니다. 이 작업을 한 번에 하나씩 수행하십시오. 스크립트가 데이터 테이블 외부(JSL 파일)에 있을 경우 데이터 테이블을 열고 변수에 넣는 것부터 시작하십시오. 그런 다음 스크립트가 실행되는 위치에 관계없이 약간을 추가하고 예상대로 작동하는지 확인하십시오. 그런 다음 더 추가하고 예상 결과를 얻는지 다시 확인하십시오. 커뮤니티, 도움말 파일 등이 친구임을 기억하십시오. 오류 메시지가 나타나면 로그( 보기 > 로그 PC용 및 창 > 로그 MacOS의 경우) 및 이전 에피소드 .
행운을 빌며 다음 주에 뵙겠습니다!