2014-11-17 67 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' – akrun

回答

2

這是你想要的嗎?

的幾個注意事項:

(1)使用相同的,而不是==裏面的if語句。 ?"=="this post

(2)我不認爲您可以輕鬆地以交互方式從命令行運行腳本。如果有人知道如何將此R腳本作爲shell命令發佈,請發表評論。 (3)您可以使用dputwrite命令將結果存儲到靜態文件以供以後使用。

# 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" 

輸出:

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" 

此外,您還可以轉換嵌套列表類...等... 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看起來是這樣的:

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

謝謝。這解決了我的問題。 –

相關問題