추가 공간을 만들지 않고 "*"기호가있는 문자열 구문 분석여보세요,
필자는 프로그래밍 방식으로 두 개의 배열을 반복하여 문자열 변수를 만들었습니다.이 변수는 모델을 데이터에 자동으로 맞추기 위해 구문 분석되고 평가 될 수 있습니다.
내가 겪고있는 문제는 열 헤더가 "DL * 15"라는 것입니다.
따라서 ": DL * 15"을 구문 분석하고 평가하려고하면 구문 분석에서 DL * 15가 생성되므로 오류가 발생합니다. 열의 이름이 DL * 15 not DL * 15이므로 추가 공간은 평가를 무효화합니다.
진행중인 작업의 예가 아래에 나와 있습니다.

"DL * 15"를 구문 분석 할 때 간격이 생기는 것을 방지 할 수있는 방법이 있습니까?
고맙습니다,
네이트
Re : 추가 공간을 만들지 않고 "*"기호가있는 문자열을 파싱합니다.이름 랩퍼는 이름을 표현식처럼 보이게하는 문자뿐만 아니라 전체 이름을 둘러 쌉니다.
또는...
이런 식으로 표현식을 작성하는 다른 방법이 있습니다. 표현식 처리 함수를 사용하여 문자열로 작업하고 문자열을 표현식으로 구문 분석하는 대신 표현식을 직접 조작 할 수 있습니다. 테이블에 이름이 " sin (a) * cos (b) "네가 할 수있어.
ex = expr(
Fit Model(
Y( YVARIABLEPLACEHOLDER ),
Effects( :age, :sex, :height ),
Personality( "Standard Least Squares" ),
Emphasis( "Effect Leverage" ),
Run(
:weight << {Plot Actual by Predicted( 1 ), Plot Regression( 0 ),
Plot Residual by Predicted( 1 ), Plot Effect Leverage( 1 )}
)
)
);
substituteInto( ex, expr(YVARIABLEPLACEHOLDER), asName("sin(a)"||"*"||"cos(b)") );
show(ex);
예 = Fit Model (Y ( 이름 ( "sin (a) * cos (b)") (0, 성별, 신장), 성격 ( "표준 최소 자승"), 강조 ( "효과 레버리지"), 실행 (: 체중 << 예측에 의한 실제 플롯, 플롯 회귀 (0 ), 예측 잔차 (1), 작의 효과 레버리지 (1)))));
SubstituteInto는 첫 번째 인수에서 두 번째 인수를 검색하고 세 번째 인수로 바꿉니다. AsName은 문자열을 이름으로 변환합니다. expr () 함수는 먼저 평가하지 않고 표현식을 전달하는 데 사용됩니다.
이처럼 열 이름을 지정하면 Name () 래퍼가 많이 표시됩니다.
Re : 추가 공간을 만들지 않고 "*"기호가있는 문자열을 파싱합니다.내 답변에 대한 몇 가지 메모 :
그만큼 "\ [... ] \ " construct를 사용하면 큰 따옴표 안에 무엇이든 넣을 수 있습니다.
평가 절하 ^ 문자로 둘러 쌓인 변수에 값을 대체합니다.
Re : 추가 공간을 만들지 않고 "*"기호가있는 문자열을 파싱합니다.D와 : 이름을 혼용 할 수 없습니다.
다음과 같이 시도해보십시오.
fitmodelstring = fitmodelstring || evalinsert("\[Y(:name("D^a[i]^ * ^b[j]^"), Efffects(]\");
Re : 추가 공간을 만들지 않고 "*"기호가있는 문자열을 파싱합니다.나는 그것이 너무 일찍 해결되었다고 말했다.
코드를 사용해 보았지만 두 개의 배열을 반복하는 내 상황의보다 복잡한 상황에서 작동하지 않습니다.
모든 코드를 작성하지 않고도 "name"이라는 단어가 계속 나타나기 때문에 작동하지 않습니다.

루프가 끝나면 최종 문자열을 가져 와서 먼저 구문 분석 한 다음 평가합니다.
eval (parse (fitmodelstring));
루프 된 전체 문자열은 위에 표시되지 않습니다.
고맙습니다,
네이트
Re : 추가 공간을 만들지 않고 "*"기호가있는 문자열을 파싱합니다.문제가있는 이름 주위에 name () 래퍼를 사용하십시오.
a="D";
b="L";
c="* 15";
f = "name(\!""||a||b||c||"\!")";
ex = parse(f);
show(ex);
ex = 이름 ( "DL * 15");
포장지는 실제로 거기 있지 않는다; 파서에게이 이름이 평범한 규칙을 따르지 않는다는 힌트입니다. 같은 이유로 래퍼와 함께 표시됩니다. \! "에 따옴표를 추가하십시오.