:folded_hands: 표현식 인덱싱: 읽기 및 쓰기 액세스☑ 멋진 새로운 기능
☐ 많은 사용자에게 도움이 될 수 있습니다!
☐ "버그"를 제거합니다.
☐ 있으면 좋다
☐ 아무도 필요하지 않아요
이러한 위시리스트 요청을 하게 된 계기는 무엇이었나요?
편집: 첫 번째 부분을 표현식 인덱싱으로 옮겼습니다. 표현식 트리에 어떻게 올라갈까요?
@jthi 님 , 해결책을 제공해 주셔서 감사합니다.
을 통해표현식 추출사용자는 표현식의 일부를 검색하고 추출할 수 있습니다.
이 함수는 패턴 검색을 제공하고 첫 번째로 일치하는 항목을 반환합니다.
와일드카드도 가능합니다
어떤 개선을 원하시나요?
디스플레이 트리 인덱싱과 데이터 테이블 인덱싱의 혼합 - 표현식에만 사용 가능:
보다 정확한 읽기 접근은 다음을 통해 가능합니다.
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
myExpr=Expr(gb = dt << Graph Builder(
Size( 437, 413 ),
Graph Spacing( 4 ),
Variables( X( :height ), Y( :weight ), Y(:height), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) )
));
//instead of:
Arg(Arg(Arg(Arg(Arg(myExpr,2),2),3),3),1)
<BR />// I want to use:
myExpr[2][2]["Variables"]["Y"(2)][1]
//assign // send // Graph Builder // Variables<BR /><BR />// or like it's possible for Display Trees:<BR />myExpr["Variables"]["Y"(2)][1]
정말 멋진 점은 데이터 테이블 인덱싱을 통해 가능한 것과 유사한 쓰기 액세스입니다 .
myExpr["Variables"]["Y"(2)][1] = Expr(:height);
대체품 과 비슷하지만 차원이 다릅니다!
[편집하다]
아마도 Expression Indexing의 가장 좋은 응용 프로그램은 Insert Into 일 것입니다. 예:
Insert Into ( myExpr["Variables"], Expr(Y(:age)))
왜 이 아이디어가 중요한가요?
표현식 인덱싱 의 힘으로 Jmp에서의 표현식 처리가 더욱 쉬워질 것입니다.:)
더 많은 소원이 제출되었습니다 
자동화 및 스크립팅Re: 표현식 인덱싱: 읽기 및 쓰기 액세스 - 상태가 다음으로 변경됨: 승인됨Re: 표현식 인덱싱: 읽기 및 쓰기 액세스JMP Expr()의 이상한 점을 설명해 줄 수 있는 사람이 있나요?
Insert Into 의 경우, 현재의 터보 모드 외에 "병합 안 함" 모드를 추가로 제공해 주세요.
터보 모드( Insert Into 가 현재 동작하는 방식):
삽입할 표현식의 헤드가 대상 위치 바로 위 레벨의 헤드와 동일할 경우, 표현식은 더 높은 레벨과 '병합'됩니다.
Insert Into (List(a,b), List(c,d)) // {a,b,c,d}추가 비병합 모드:
Insert Into (List(a,b), List(c,d), merge(0)) // {a,b,{c,d}}
표현식 인덱싱을 설정하는 것은 꽤 번거롭고, 대부분 JMP 사용자는 이를 사용하지 않으므로 희망하는 바가 구현될 가능성은 거의 없습니다.
삽입을 위한 소원을 조각하다: 삽입: 평평하게 하다(0|1)
Re: 표현 색인: 표현 트리를 오르는 데 도움을 주세요@Craige_Hales 님 , 좋은 예를 보여주셔서 감사합니다.:)
저는 다른 사람들도 이 아이디어를 지지하기를 바랍니다.
Re: 표현 색인: 표현 트리를 오르는 데 도움을 주세요이것을 어떻게 변환하시겠습니까?
myExpr = Expr(
gb = dt << Graph Builder(
Size(437, 413),
Graph Spacing(4),
Variables(X(:height), Y(:weight), Overlay(:sex)),
Elements(Points(X, Y, Legend(1)), Smoother(X, Y, Legend(2)))
)
);
이것에?
myExpr = Expr(
gb = dt << Graph Builder(
Size(437, 413),
Graph Spacing(4),
Variables(X(:height), Y(:weight), /*added:*/ Y(:height), Overlay(:sex)),
Elements(Points(X, Y, Legend(1)), Smoother(X, Y, Legend(2)))
)
);
인덱싱을 사용하면 훨씬 더 쉽게 만들 수 있습니다. InsertInto(myExpr, ...) 문제처럼 느껴집니다. 연산자를 목록으로 바꾸고 다시 되돌리는 방법을 알아낼 수 있다면 작동할 것입니다. 하지만 다음과 같은
InsertInto( myExpr[/* = */ 2][ /* << */ 2]["Variables"], /* insert position*/ 3, expr( Y(:height)))
그 자리에서 표현을 편집할 수 있습니다.
개념 증명:
myExpr = Expr(
gb = dt << Graph Builder(
Size( 437, 413 ),
Graph Spacing( 4 ),
Variables( X( :height ), Y( :weight ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) )
)
);
Show( "Original", Name Expr( myExpr ) );
// convert operators to lists
Substitute Into( myExpr, Expr( Assign() ), {} );
Substitute Into( myExpr[2], Expr( Send() ), {} );
Substitute Into( myExpr[2][2], Expr( Graph Builder() ), {} );
Substitute Into( myExpr[2][2][3], Expr( Variables() ), {} );
// make the edit
Insert Into( myExpr[2][2][3], Expr( Y( :height ) ), 3 );
// reverse the earlier conversions
Substitute Into( myExpr[2][2][3], {}, Expr( Variables() ) );
Substitute Into( myExpr[2][2], {}, Expr( Graph Builder() ) );
Substitute Into( myExpr[2], {}, Expr( Send() ) );
Substitute Into( myExpr, {}, Expr( Assign() ) );
Show( "Edited", Name Expr( myExpr ) );
//
// wouldn't it be nice if we could use the edit line directly?
//
Write( "\!nTry without a list:" );
Insert Into( myExpr[2][2][3], Expr( Y( :height ) ), 3 ); // does not work
// it fails because expressions can't be indexed, even though they
// are extremely similar to lists (as seen above).
// I'm not sure why it needs to be that way.
우리는 xxxInto(...) 함수를 사용하는 것을 좋아하는데, 이는 기존 표현식 트리를 그 자리에서 수정하기 때문입니다. 어떤 경우에는 효율성에 대한 문제가 될 수 있지만(표현식의 일부를 복사하여 다시 작성하는 것과 비교했을 때) 연산자를 목록으로 처리하는 것이 좀 더 명확합니다.
감사합니다 @hogi , @jthi
Re: 표현 색인: 표현 트리를 오르는 데 도움을 주세요@jthi , 좋은 해결책이 있어서 이 주제가 토론에서 훨씬 더 나은 자리를 차지할 것 같습니다.
https://community.jmp.com/t5/Discussions/Expression-Indexing-How-to-climbing-the-Expression-Tree/mp/697406
거기에 당신의 의견을 추가해 주시겠습니까? 그러면 그것을 해결책으로 받아들이겠습니다.
Re: 표현 색인: 표현 트리를 오르는 데 도움을 주세요@jthi 감사합니다!
훌륭함 - expr 추출 - Substitute (... List)를 통한 해결 방법보다 훨씬 나음:
-> 문제 1 및 3을 해결합니다.
문제 #2의 경우, 두 번째 예는 좋은 해결책이 되며 동시에:
간단함을 보여줍니다표현 색인.
Extract expr을 사용하면 긴급하게 읽기 접근 표현식 인덱싱이 필요하지 않습니다.:)
편집하다 :
아아! Extract Expr은 첫 번째 발생만 찾습니다!
Re: 표현 색인: 표현 트리를 오르는 데 도움을 주세요JMP에는 이 중 일부를 더 쉽게 만드는 Extract Expr이 있습니다.
Names Default To Here(1);
myExpr = Expr(
gb = dt << Graph Builder(
Size(437, 413),
Graph Spacing(4),
Variables(X(:height), Y(:weight), Overlay(:sex)),
Elements(Points(X, Y, Legend(1)), Smoother(X, Y, Legend(2)))
)
);
yexpr = Extract Expr(myExpr, Y(Wild()));
variables_expr = Extract Expr(myExpr, Variables(Wild List()));
Names Default To Here(1);
myExpr = Expr(
gb = dt << Graph Builder(
Size(437, 413),
Graph Spacing(4),
Variables(X(:height), Y(:weight), Y(:height), Overlay(:sex)),
Elements(Points(X, Y, Legend(1)), Smoother(X, Y, Legend(2)))
)
);
variables_expr = Extract Expr(myExpr, Variables(Wild List()));
idx = 0;
For(i = 1, i <= N Arg(variables_expr), i++,
firstlevel = Arg(variables_expr, i); // could use Extract Expr
If(Head(firstlevel) == Expr(Y) & idx == 2,
secondlevel = Arg(firstlevel, 1);
);
);
show(secondlevel);
Re: :folded_hands: 표현식 인덱싱: 읽기 및 쓰기 액세스Expression Indexing을 위한 또 다른 응용 프로그램 - 쓰기 모드:
Head()를 바꾸시겠습니까?
이미 사용 가능한 소원이 있습니다: 첫 번째 발생 대체
네, 부탁드립니다 : )
Re: :folded_hands: 표현식 인덱싱: 읽기 및 쓰기 액세스가장 중요한 사용 사례는 이미 사용 가능하거나 이미 개발되어 있습니다.
@Sarah-Sylvestre , 상태가 다음으로 설정될 수 있습니다. 지금은 계획되지 않음