2014-11-17 3 views
1

콘솔에서 사용자 입력을 원합니다. 봉급, 회사 명단 및 직업 목록.R에 여러 값을 넣고 목록에 저장하십시오.

기업 및 업무의 개별 가치를 콘솔에서 캐릭터로 취할 수 있지만 여러 값을 가져 와서 추가 분석을 위해 변수에 저장하는 방법은 무엇입니까? 그 값을 저장하고 액세스해야합니다.

코드 :

 ##############Classs Declaration############ 
    setClass(Class="User", 
      representation(
       salary="numeric", 
       company="character", 
       jobtitle="character" 

      )) 
    ###############Function Declaration########## 
    myFunction <- function(){ 
     sal <- readline("Salary?") 
     comp <- readline("Company?") 
     job <- readline("Job Title?") 

     sal <- as.numeric(unlist(strsplit(sal, ","))) 
     comp <- as.character(comp) 
     job <- as.character(job) 

     return(new("User", 
       salary=sal, 
       company=comp, 
       jobtitle=job 

       )) 
    } 

    ##########Calling the function######## 
    aUser = if(interactive()) myFunction() 

미리

+0

예상되는 출력에 대해 명확하지 않습니다. 동일한 함수를 사용하여 여러 값을 저장할 수있었습니다. 예를 들어'Salary? 25, 32'와'aUser @ salary # [1] 25 32' – akrun

+0

을 입력하면 숫자 값을 사용한다고 해답을 얻었지만 문자 유형 값은 작동하지 않습니다. 그것은 전체 문자열을 보여줍니다. –

+0

'sal '과 비슷한 문자열을'split'해야합니다. – akrun

답변

2

에 감사이 당신이 원하는 무엇인가?

몇 가지 참고 사항 :

(1) 대신 == 내부 경우 문을 동일하게 사용합니다. ?"==" 또는 this post

(2)이 대화 형 스크립트를 명령 줄에서 쉽게 실행할 수 있다고 생각하지 않습니다. 누구든지이 R 스크립트를 쉘 명령으로 만드는 방법을 알고 있다면 주석으로 게시하십시오.

(3) dput 또는 write 명령을 사용하여 나중에 사용하기 위해 결과를 정적 파일에 저장할 수 있습니다.

# result variable is an array used to store user input 
# remove result variable from the environment 
if(exists("result")){remove(result)} 
while(identical(flag_continue <- readline("continue?:"), "y")){ 
    aUser <- myFunction() 
    if(!exists("result")){ 
     result <- c(aUser) 
    } else { 
     result <- c(aUser, result) 
    }  
} 
# now all the user typed info has been stored inside a list called "result" 

출력 :

convertUser <- function(result){ 
    data.frame(
    salary = unlist(lapply(result, FUN=function(x){attr(x, "salary")})), 
    company = unlist(lapply(result, FUN=function(x){attr(x, "company")})), 
    jobtitle = unlist(lapply(result, FUN=function(x){attr(x, "jobtitle")})) 
) 
} 
df <- convertUser(result) 

지금 df은 다음과 같습니다 또한

continue?:y 
Salary?1 
Company?com1 
Job Title?job1 
continue?:y 
Salary?2 
Company?com2 
Job Title?job2 
continue?:n 
> str(result) 
List of 2 
$ :Formal class 'User' [package ".GlobalEnv"] with 3 slots 
.. [email protected] salary : num 2 
.. [email protected] company : chr "com2" 
.. [email protected] jobtitle: chr "job2" 
$ :Formal class 'User' [package ".GlobalEnv"] with 3 slots 
.. [email protected] salary : num 1 
.. [email protected] company : chr "com1" 
.. [email protected] jobtitle: chr "job1" 

, 당신은 등 작업 ... dataframe에 result 개체가 ... 그 중첩 된 목록 클래스를 변환 할 수 있습니다 :

> convertUser(result) 
salary company jobtitle 
1  3 com2  job3 
2  2 com2  job2 
3  1 com1  job1 
+0

감사합니다. 이것은 내 문제를 해결했다. –

관련 문제