1

本を使ってRを学ぼうとしていました。行列の各行について、その行の最初の d 要素の大部分が 1 か 0 かに応じて、ベクトルの対応する要素が 1 または 0 になる例を実行しようとしました。使用されたコードは:-

copymaj <- function(rw,d) {
   maj <- sum(rw[1:d]) / d
   return(if(maj > 0.5) 1 else 0)
}

 x
    [,1] [,2] [,3] [,4] [,5]
[1,]  1    0    1    1    0
[2,]  1    1    1    1    0
[3,]  1    0    0    1    1
[4,]  0    1    1    1    0

apply(x,1,copymaj,3)

上記のエラーを表示しています。また、そうしてapply(x,1,copymaj(3))もエラーが表示されます。

R 2.13 がインストールされています 助けてください!

4

1 に答える 1

5

@BenBarnes が指摘したようにsumsimおそらくsum.

次のようにして、エラーを再現できました。

copymaj0 <- function(rw,d) {
  maj <- sim(rw[1:d]) / d    # here you have sim, this causes the error 
  return(if(maj > 0.5) 1 else 0)
}

copymaj1 <- function(rw,d) {
  maj <- sum(rw[1:d]) / d    # here you have sum which works well for me 
  return(if(maj > 0.5) 1 else 0)
}

x <- matrix(c(1,0,1,1,0,
         1,1,1,1,0,
         1,0,0,1,1,
         0,1,1,1,0), ncol=5, byrow=TRUE)

apply(x,1,copymaj0,3) # prints error
Error in FUN(newX[, i], ...) : could not find function "sim"

apply(x,1,copymaj1,3) # works well
[1] 1 1 0 1

私は本当にスペルミスだと思いますsum

apply(x,1,copymaj1(3))を読む と動作し?applyませ ん. オプションの引数を fun に渡すには、as inを使用する必要がありますが、使用する必要はありません。apply(X, MARGIN, FUN, ...)apply(x,1,copymaj1(3))...FUNd=3...apply(x,1,copymaj1,3)apply(x,1,copymaj1(3))

于 2012-09-24T10:46:53.823 に答える