2011-02-05 3 views
4

저는 R 초보자입니다. 간단한 문제처럼 보였습니다. R이 평가되는 방법과시기에 대해 꽤 깊은 질문을 던졌습니다.R의 함수에 계측되지 않은 명령을 전달하십시오.

저는 Rserve를 사용하고 있습니다.

RSeval(connection, quote(try(command))) 

그래서 난 그냥 전화와 같은 일을하는 함수의 R 싶습니다 : 원격으로 평가 일을 얻을 수있는 일반적인 구문은 약간의 고통이 반복적으로 입력하는 것입니다

r(command) 

내 당신은 그것을 짐작

r <- function(command) { 
    RSeval(c, quote(try(command))) 
} 

:이 내 혼란 Rserve 데몬으로, 문자 그대로, try(command)를 전송 첫째, 순진, 참여 시도를 실패 할 수밖에. command부분적으로이되도록 평가 해주세요. 즉, 인수로 입력 한 내용으로 대체되었지만 이 없으므로이 로컬로 평가됩니다.

나는 이것에 대한 해결책을 찾았으며, 견적, 대체, 평가, 전화 등을위한 문서를 열람했다. 그러나 나는 효과가있는 것을 찾을 수 없었다. command은 로컬로 평가되거나 전혀 평가되지 않습니다.

이것은 큰 문제는 아니며, 전체 유형을 입력 할 수 있습니다 quote(try()) 항상; 그러나이 시점에서 나는 이것이 작동하도록하는 방법에 대해 대부분 궁금하다.

편집 : 내가 원하는 것을 더 설명합니다.

  • 위의 텍스트에서 command은 전화를하는 것이 이상적입니다. 즉, 문자열이 아니어야합니다. "a<-3" 또는 quote(a<-3)이 아닌 a <- 3 또는 assign("a", 3)과 같은 것입니다. 나는 이것이이 까다로운 부분의 일부라고 생각한다. R이 로컬에서 이것을 평가하지 말라고 말하기는 정말로 어렵지만 문자로만 보내십시오. 기본적으로 내 함수는 그 인수를 평가하지 않는 quote()과 약간 같아야한다.
  • 나의 의도에 대한 설명. 원격 R 데몬에게 명령을 전달하기 위해 Rserve를 자주 사용하고 싶습니다. 명령은 내 자신 (또는 동료)과 방화벽 및 인증으로 보호되는 데몬 (루트로 실행되지 않음)이므로 악의적 인 명령이 전달 될 염려는 없습니다.
  • 솔직히 말해서 이것은 큰 문제는 아니며 항상 RSeval(c, quote(try()))을 사용하여 매우 행복 할 것입니다. 내가 제대로 이해한다면이 시점에서 나는이 더 잘 모르겠어요 :-)
+2

R에서 평가를 제어하는 ​​방법과 그 안의 몇 가지 함정을 설명하는 내용을 읽고 싶을 수도 있습니다. https://github.com/hadley/devtools/wiki/Evaluation – hadley

+0

이 링크는 이제 종료되었습니다. –

답변

4

대체 명령을 사용하면 호출에 빌드 할 수있는 인수가 평가되지 않을 수 있습니다.

+1

당신 말이 맞아요. 나는 나의 질문을 게시하기 전에 이것을 시도 했었다고 확신했지만 분명히 그렇지 않았다! 이 코드는 내가 원했던 것입니다 : 'r <- (command) RSeval (c, substitute (command))' 많은 감사합니다. 내가 소리를내는 것보다 더 간단했다! – crayola

0

R의 subleties에 대한 흥미로운 질문처럼 볼 - eval(parse(text = command)) 트릭을 할 것인가? command은 문자이므로 쉽게 함수 인수로 전달할 수 있습니다. 내가 점수를 얻고 있다면 ...

어쨌든, 사용자 지정 명령을 평가하는 것은 잠재적으로 악의적이므로 권장하지 않습니다. AppArmor를 설치하고 조정할 필요가 있습니다 (쉬운 방법은 아닙니다). 또는 전체 평가 항목을 삭제하십시오.

+0

안녕하세요 - 답장을 보내 주셔서 감사합니다. 불행히도 제 생각에는 제가 약간 불분명하다고 생각합니다. 덜 모호하게하기 위해 초기 질문에 편집을 추가 할 것입니다. – crayola

+1

'parse (text = command)'는 속임수를 쓰지 않습니다.'command'가 문자열이어야합니다. 'command'를 평가하지 않고 문자열을 만드는 방법을 찾지 못한다면; 'as.character' 나'deparse'도 그 법안에 맞지 않는 것 같습니다. – crayola

관련 문제