2014-01-24 80 views
0

我有麻煩的子集從一個列表使用我的函數的變量。

rankhospital <- function(state,outcome,num = "best") { 

#code here 

e3<-dataframe(...,state.name,...) 


if (num=="worst"){ return(worst(state,outcome)) 
}else if((num%in%b=="TRUE" & outcome=="heart attack")=="TRUE"){ 
sep<-split(e3,e3$state.name) 
hosp.estado<-sep$state 
hospital<-hosp.estado[num,1] 
return(as.character(hospital)) 

我分裂由狀態我的數據幀(這是我的函數的變量) 但是hosp.estado<-sep$state不起作用。我也曾嘗試as.data.frame.

功能(rankhospital( 「NY」 ....)返回我的字符(0)。

當我喂用代碼九月$ 「NY」 直接在九月$狀態它完美的作品,所以我想這個問題是我不能使用功能的變量來做到這一點。我說得對?我可以用什麼代替?

謝謝!!

+1

嘗試'九月[ '狀態']' – RoyalTS

+1

另外,嘗試'九月[ '狀態']'。 –

+0

此外,你的if條件是不必要的複雜。 %b和結果==「心臟病發作」中的數字%也可以。 – RoyalTS

回答

1

如果state是在你的函數的變量,你可以參考一列通過使用state定名爲:sep[state]sep[[state]]。第一個產生一個數據幀,其中一列的值基於state的值命名。第二個產生一個未命名的向量。

df=data.frame(NY=rnorm(10),CA=rnorm(10), IL=rnorm(10)) 
state="NY" 
df[state] 
#    NY 
# 1 -0.79533912 
# 2 -0.05487747 
# 3 0.25014132 
# 4 0.61824329 
# 5 -0.17262350 
# 6 -2.22390027 
# 7 -1.26361438 
# 8 0.35872890 
# 9 -0.01104548 
# 10 -0.94064916 
df[[state]] 
# [1] -0.79533912 -0.05487747 0.25014132 0.61824329 -0.17262350 -2.22390027 -1.26361438 0.35872890 -0.01104548 -0.94064916 

class(df[state]) 
# [1] "data.frame" 

class(df[[state]]) 
# [1] "numeric" 
0

好像你正試圖得到最好的醫院,你不想在split這裏(看sep的結果,看看我的意思),而是使用:

as.character(e3[e3$state.name==state, 1][num]) 

這有希望做你想做的。

0

你需要sep[[state]]而不是sep$state來獲取數據幀出你的seplist,你的函數的參數state匹配。就像這樣:

e3 <- read.csv("https://raw.github.com/Hindol/data-analysis-coursera/master/HW3/hospital-data.csv") 

state <- "WY" 
num <- 1:5 

sep<-split(e3,e3$State) 
hosp.estado<-sep[[state]] 
hospital<-hosp.estado[num,1] 
as.character(hospital) 
# [1] "530002" "530006" "530008" "530010" "530011"