3

1970 年 1 月 1 日からの日数を指定して、曜日を出力する関数を作成しています。一連のif thenステートメントの場合、関数は正常に機能しましたが、関数をベクトルで使用したいので、このばかげたifelseステートメントのチェーンを構築する必要がありました。

残念ながら、私はこのエラーを受け取り続けます:

Error in ifelse(rem == 0, day = "Thursday", ifelse(rem == 1, day = "Friday",  : 
unused argument(s) (day = "Thursday")
Calls: dayFinder -> ifelse
Execution halted

私はそれを回避する方法を理解できませんでした-ステートメントのthen一部を単に無視しているようです. ifelseさまざまなサンプル データ セットまたはデータ ポイントを入力してみましたが、エラーを修正できませんでした。

これが私のコードです-事前に感謝します。

dayFinder <- function(x){
#Assuming that '0' refers to January 1 1970
#Store given number
start <- x
#Initialize variable
day="Halloween"
#Divide x by 7 and store remainder
rem <- x%%7
#Determine the day
ifelse(rem==0, day="Thursday", 
    ifelse (rem==1, day="Friday", 
        ifelse (rem==2, day="Saturday", 
            ifelse (rem==3, day="Sunday", 
                ifelse (rem==4, day="Monday", 
                    ifelse(rem==5, day="Tuesday", 
                        if (rem==6)
                            {
                                day="Wednesday"
                                }))))))
return(day)
}

q = seq(7,50,1)
z = dayFinder(q)
z
4

3 に答える 3

10

チェーンにはいくつか問題がありますが、ifelse最初に、この種のセレクターをより読みやすい方法で作成する方法について説明します。

days.of.week <- c("Thursday", "Friday", "Saturday", "Sunday", "Monday", "Tuesday", "Wednesday")
x <- 21  # some value
day <- days.of.week[(x%%7) + 1]
day
[1] "Thursday"


さて...の使用ifelseunused argument error...
最初に、ifelse()は関数であることに注意してください。したがって、のようなステートメントを書くと、Rはその部分を名前付き引数を関数に渡しているか
... ifelse(rem == 0, day="Thursday, ...のように解釈します。 さらに、一般的には、[ほとんどの場合]の使用は避ける必要があります。おそらく、を使用することを意味します。 とにかく、ifelseチェーンは次のようになります。day="..." day
=<-

rem <- 21%%7
day <- ifelse(rem==0, "Thursday", 
         ifelse (rem==1, "Friday", 
           ifelse (rem==2, "Saturday", 
             ifelse (rem==3, "Sunday", 
               ifelse (rem==4, "Monday", 
                 ifelse(rem==5, "Tuesday", "Wednesday")
               )
             )
           )
         )
       )
于 2012-11-09T07:35:25.580 に答える
3
dayFinder <- function(x) weekdays(as.Date("1970/1/1") + x)
dayFinder(21)
# [1] "Thursday"
dayFinder(c(21, 101))
# [1] "Thursday" "Sunday"  
于 2012-11-09T09:40:31.347 に答える