2016-02-12 35 views
1

我在R中編寫了一個函數,它返回一個由兩個變量組成的列表。該函數正確工作,返回正確的值。但是,問題是,我不能再訪問列表進行進一步處理。代碼是這樣的:返回並訪問R中函數的對象

grinder <- function(x) { 

if(x == "BID") { 
miles <- 18.4 * n.row 
tolls <- 1.8 * n.row 

} else if(x == "SPR") { 
miles <- 10.8 * n.row 
tolls <- 0 

} else if (x == "BRI") { 
miles <- 3.8 * n.row 
tolls <- 0 

} else if (x == "GOO") { 
miles <- 66.2 * n.row 
tolls <- 1.8 * n.row 

} else if (x == "MIL") { 
miles <- 108 
tolls <- 0 

} else if (x == "SMH") { 
miles <- 94.6 * n.row 
tolls <- 2 * n.row 

} 

mil.tol <- list(miles,tolls) 
return(mil.tol) 

} 

grinder(x) 

返回正確的值,但是我不能然後訪問mil.tol對這些值做任何事情。我也不能爲英里或通行費獲得正確的值。控制檯返回這個:

> mil.tol 
Error: object 'mil.tol' not found 
> miles 

有什麼建議嗎?

+1

mil.tol < - grinder(x)然後訪問它 – grubjesic

+0

你應該期望'grinder'像任何正常的R函數一樣工作。這意味着它不僅爲您創建對象,而且還將結果分配給對象。如果你運行線性模型'lm(mpg〜wt,data = mtcars)',那麼這將是**糟糕的**如果在你的工作空間中創建了一個名爲「model」的對象 - 你無法使用多個模型一次。就像你習慣命名和分配你的模型'mod1 < - lm(...)'一樣,你需要命名和分配函數的輸出:'mil.tol < - grinder(x)' – Gregor

回答

0

milestollsmil.tol都是本地的功能,並且不退還,但您可以分配功能(即從return())的輸出像下面mil.tol:

mil.tol <- grinder(x) 

會建議也讀這個SO帖子here