2017-06-14 6 views
0

RStudio版関数に渡されていません。引数が正しく

関数の構造は、このようなものです:rankall < - 機能(結果、NUM =「最善」)

outcomeは結果を注文する規格であり、そしてnumはランクが選択する機能に指示します。

この関数はnum = "best"other numeric numbersで正しい結果を返すことができますが、正しい結果を"worst"とすることはできません。関数のコードは次のようにされています。問題は、私はnumoutcomeから"pneumonia"、および"worst"を与えようと試み、ある場所を確認するには

>tail(rankall("pneumonia", "worst"), 3) 
    hos_req        sta_req 
WI "MINISTRY DOOR COUNTY MEDICAL CENTER" "WI" 
WV "MONTGOMERY GENERAL HOSPITAL, INC" "WV" 
WY "EVANSTON REGIONAL HOSPITAL"   "WY" 
There were 46 warnings (use warnings() to see them) 

rankall <- function(outcome, num = "best") { 
      ## Read outcome data 
      datful <- read.csv("outcome-of-care-measures.csv", colClasses = "character") 
      ## Check that state and outcome are valid 
      if(outcome == "heart attack"){ 
        oc <- 11 
        } else if(outcome == "heart failure"){ 
          oc <- 17 
          } else if(outcome == "pneumonia"){ 
            oc <- 23 
          } else { 
            "invalid outcome" 
          } 
      ## For each state, find the hospital of the given rank 
      StaUni <- unique(datful[,7]) 
      StaUni <- sort(StaUni) 
      sta_req <- c() 
      hos_req <- c() 
      out_req <- c() 
      for(i in StaUni){ 
        ##For each state, assemble a data.frame 
        good <- datful[, 7] == i 
        Sta_i <- datful[, 7][good] 
        Hos_i <- datful[, 2][good] 
        Out_i <- as.numeric(datful[, oc][good]) 
        out_na <- is.na(Out_i) 
        Sta_i <- Sta_i[!out_na] 
        Hos_i <- Hos_i[!out_na] 
        Out_i <- Out_i[!out_na] 
        Obs_i <- data.frame(Sta_i, Hos_i, Out_i) 
        ##Reoder each data.frame 
        Obs_i <- Obs_i[order(Obs_i[, 3], Obs_i[, 2]),] 
        ## Change the value of num depend on it's value. 
        if(num == "best"){ 
          num = 1 
        } else if(num == "worst"){ 
            num = sum(good) 
          } else { 
              num = num 
            } 
        hos_req[i] <- as.character(Obs_i[num, 2]) 
        sta_req[i] <- as.character(Obs_i[num, 1]) 
        out_req[i] <- as.numeric(Obs_i[num, 3]) 
      } 
      ## Return a data frame with the hospital names and the 
      ## (abbreviated) state name 
      DFReq <- cbind(hos_req, sta_req) 
      DFReq 
    } 

結果はこのようなものです。他のすべては関数のように残されています(関数ではないことを除いて、問題のどこにあるかだけを知りたい)。

 ## Read outcome data 
     datful <- read.csv("outcome-of-care-measures.csv", colClasses = "character") 
     ## Check that state and outcome are valid 

     ## For each state, find the hospital of the given rank 
     StaUni <- unique(datful[,7]) 
     StaUni <- sort(StaUni) 
     sta_req <- c() 
     hos_req <- c() 
     out_req <- c() 
     for(i in StaUni){ 
       ##For each state, assemble a data.frame 
       good <- datful[, 7] == i 
       Sta_i <- datful[, 7][good] 
       Hos_i <- datful[, 2][good] 
       Out_i <- as.numeric(datful[, 23][good]) 
       out_na <- is.na(Out_i) 
       Sta_i <- Sta_i[!out_na] 
       Hos_i <- Hos_i[!out_na] 
       Out_i <- Out_i[!out_na] 
       Obs_i <- data.frame(Sta_i, Hos_i, Out_i) 
       ##Reoder each data.frame 
       Obs_i <- Obs_i[order(Obs_i[, 3], Obs_i[, 2]),] 
       ## Change the value of num depend on it's value. 

       hos_req[i] <- as.character(Obs_i[length(Sta_i), 2]) 
       sta_req[i] <- as.character(Obs_i[length(Sta_i), 1]) 
       out_req[i] <- as.numeric(Obs_i[length(Sta_i), 3]) 
     } 
     ## Return a data frame with the hospital names and the 
     ## (abbreviated) state name 
     DFReq <- cbind(hos_req, sta_req) 
     DFReq 

結果の最後の3行は、この(正しい答えである)のようなものです::

WI "MAYO CLINIC HEALTH SYSTEM - NORTHLAND, INC" "WI" 
WV "PLATEAU MEDICAL CENTER"      "WV" 
WY "NORTH BIG HORN HOSPITAL DISTRICT"   "WY" 

誰でも機能を動作させるために変更するものを私に伝えることができるコードは次のようですいつnum = "worse"?誰もがコードを実行するために

は、ここでのデータです:コメントで私たちの交換に基づいて

https://dl.dropboxusercontent.com/u/1174148/outcome-of-care-measures.csv

+0

@ChiPak @ChiPak @ChiPak私の考えと同じように、あなたの解決策は機能しません。 Falseは0、Trueは1なので、sum(good)は同じになります。とにかくありがとう。 – Ryan

+0

@Ryanあなた自身の質問を解決した場合は、質問の本文に編集するのではなく、回答として投稿してください。これにより、将来の読者は解決策を見つけるのに役立ちます。 – Llopis

+0

@Llopis答えが見つからず、2番目の部分は関数ではありません。引数のテスト値を関数の中に入れて、うまく動作するテスト値の答えを計算します。しかし、私がテスト値で関数を使用すると、結果は間違っています。 – Ryan

答えて

0

。これにより、同じ回答が得られるはずです。

rankall <- function(outcome, num = "best") { 
     ## Read outcome data 
     datful <- read.csv("outcome-of-care-measures.csv", colClasses = "character") 
     ## Check that state and outcome are valid 
     if(outcome == "heart attack"){ 
       oc <- 11 
       } else if(outcome == "heart failure"){ 
         oc <- 17 
         } else if(outcome == "pneumonia"){ 
           oc <- 23 
         } else { 
           "invalid outcome" 
         } 
     ## For each state, find the hospital of the given rank 
     StaUni <- unique(datful[,7]) 
     StaUni <- sort(StaUni) 
     sta_req <- c() 
     hos_req <- c() 
     out_req <- c() 
    V <- 1 
     for(i in StaUni){ 
       ##For each state, assemble a data.frame 
       good <- datful[, 7] == i 
      # print(tail(good)) 
       Sta_i <- datful[, 7][good] 
       Hos_i <- datful[, 2][good] 
       Out_i <- as.numeric(datful[, oc][good]) 
       out_na <- is.na(Out_i) 
       Sta_i <- Sta_i[!out_na] 
       Hos_i <- Hos_i[!out_na] 
       Out_i <- Out_i[!out_na] 
       Obs_i <- data.frame(Sta_i, Hos_i, Out_i) 
       ##Reoder each data.frame 
       Obs_i <- Obs_i[order(Obs_i[, 3], Obs_i[, 2]),] 
       print(tail(Obs_i)) 
       ## Change the value of num depend on it's value. 
       if(num == "best"){ 
         V <- 1 
       } else if(num == "worst"){ 
           V <- length(Sta_i) 
         } else { 
             V <- V 
           } 
       hos_req[i] <- as.character(Obs_i[V, 2]) 
       sta_req[i] <- as.character(Obs_i[V, 1]) 
       out_req[i] <- as.numeric(Obs_i[V, 3]) 
     } 
     ## Return a data frame with the hospital names and the 
     ## (abbreviated) state name 
     DFReq <- cbind(hos_req, sta_req) 
     DFReq 
} 
+0

私はあなたのコードを試しましたが、 "v = v"を "v = num"に変更しました。これは各セルにNAの結果を与えます。ちなみに、コメントにはどのようにコードフォーマットを追加しますか? – Ryan

+0

なぜか分かりませんが、あなたのコードを実行した後で、私の元々の機能が今でも動作します。私は自宅の別のコンピュータでもう一度それを確認するために戻ってきます。そして私はあなたの投稿を続けます。 – Ryan

+0

あなたが言ったように、それは "for"ループの問題です。私は "V"を "num"に変更することで問題を繰り返すことができます。どうもありがとうございました。 – Ryan

関連する問題