2013-03-26 2 views
1

희망은 한 번에 R에 붙여 넣을 수있는 스크립트를 작성하는 것입니다. 이상적으로이 스크립트에는 다양한 기능이 산재 해있는 코드 행이 있습니다. 하지만 지금부터는 코드를 한 번에 하나씩 붙여 넣어야합니다. 왜냐하면 (작성한대로) 함수는 그 아래의 코드와 동시에 실행될 때 작동하지 않기 때문입니다.R 스크립트 내에 함수 포함

아래 코드에서 사용자가 초기 데이터를 입력하고 계산을 실행하게하고 싶습니다. 여러 행의 "readline"호출을 연속적으로 실행할 수 없기 때문에이를 Define 함수로 묶었습니다. 그러나 한 번에 R에 붙여 넣으면 다음 코드가 작동하지 않습니다.

Define<-function(){ 
N<-readline("EnterDeployment # ") 
Y<-as.numeric(readline("What Year was the Deployment? ")) 
L<-as.numeric(readline("What is the Distance? ")) 

return(list("Year"=Y,"Name"=N, "Length"=L))  
} 

Def<-Define() 

Name<-Def$Name 
Year<-Def$Year 
L<-Def$Length 

readline(paste("UPDN=",Name,"Year=",Year,"Distance=",L,"If this is correct press Return", sep=" ")) 


D<-L/4 
F<-D*5 

하지만 세그먼트로 그것을 어기면, 그냥 잘 작동합니다. 단일 또는 다중 함수를 코드 행에 통합하는 방법이 있습니까?

+0

예를 확인했는데 실제로 복사/붙여 넣기가 작동하지 않습니다. 그러나 이것은 어쨌든 꽤 추한 접근법입니다. '소스 '를 사용해 보셨습니까? 이것은 나를 위해 작동합니다. 그래서 기본적으로 R 코드 (예 :'test.R')에 코드 행을 저장 한 다음'source (test.R)'을 호출하십시오. 파일이 위치한 폴더를 설정하거나 ('setwd()') 완전한 경로를 지정하십시오. –

+0

예,이 코드를 "test.R"파일에 저장하고'source ("test.R")를 호출하면 정상적으로 작동합니다. – Marius

+0

좋습니다. @ Vinterwoo, 그것은 또한 당신을 위해 일하고 대답으로 행복합니까? 그렇다면, 나는 그것을 하나로서 게시 할 수 있으며 그것을 허용 된 것으로 표시 할 수 있습니다. 그렇지 않다면, 우리는 당신이 찾고있는 것을 좀 더 자세하게 볼 필요가 있다고 생각합니다. –

답변

5

다른 단계도없는 것은 아닙니다. 그것은 문제를 해결하고 더 살이 좋은 IMHO가 될 것입니다.

> FOO() 
EnterDeployment # 12 
What Year was the Deployment? 2012 
What is the Distance? 54 
UPDN= 12 Year= 2012 Distance= 54 If this is correct press Return 
$D 
[1] 13.5 

$F 
[1] 67.5 

는 물론, 당신이 source()FOO()를 포함하는 .R 파일을해야합니다,하지만 그건 문제가되지 않습니다 : 사용

FOO <- function() { 
    Define<-function(){ 
    N<-readline("EnterDeployment # ") 
    Y<-as.numeric(readline("What Year was the Deployment? ")) 
    L<-as.numeric(readline("What is the Distance? ")) 

    list("Year"=Y,"Name"=N, "Length"=L) 
    } 
    Def<-Define() 

    Name<-Def$Name 
    Year<-Def$Year 
    L<-Def$Length 

    readline(paste("UPDN=",Name,"Year=",Year,"Distance=",L, 
       "If this is correct press Return",  
       sep=" ")) 

    D<-L/4 
    F<-D*5 
    list(D = D, F = F) 
} 

우리가 있습니다.

왜 이렇게 좋습니까? 이런 기능과 관련된 모든 단계를 캡슐화하는 것은 깔끔합니다. 또한 중간 단계로 생성 된 객체를 오염시키지 않습니다. 마지막으로 이것을 다른 사용자에게 전달하면 R 패키지로 패키징 할 수 있습니다 (문서를 작성할 필요가 없습니다. 베어 코어 뼈 (.Rd) 만 추가하면됩니다).

관련 문제