1

我试图用一本书来学习 R。我试图做一个示例,其中对于矩阵的每一行,向量的相应元素将是 1 或 0,具体取决于该行中的前 d 元素的大多数是 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 指出的那样,您可能拼写错误sum,我认为您写sim的是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您会看到 apply(X, MARGIN, FUN, ...),然后会apply(x,1,copymaj1(3))产生错误,因为 ...替换FUN(d=3在您的情况下) 的参数被遗漏。为了将可选参数传递给您的乐趣,您必须使用...as inapply(x,1,copymaj1,3)但不能使用apply(x,1,copymaj1(3)).

于 2012-09-24T10:46:53.823 回答