R函数长度错误消息

时间:2018-03-07 07:21:32

标签: r

我做了一个函数来计算I的总和(Xi

&#13 ;

my.ecdf<- function(x,y) {
  if(!is.null(dim(y)))
    stop("y has more than one dimension")
  n<-length(x)
  i<-1:n 
  p<-if(x[i]<y) 1 else {
    0
  }
  (sum(p))/n
}
&#13;
&#13;
&#13;

但是当我使用输入(rnorm(11),6)运行它时,我收到此错误:

&#13;
&#13;
Warning message:
In if (x[i] < y) 1 else { :
  the condition has length > 1 and only the first element will be used
&#13;
&#13;
&#13;

有什么想法吗?如果它显而易见,我很抱歉。 (我也不想使用for循环)

2 个答案:

答案 0 :(得分:1)

这是一个与y

长度相同的逻辑向量
is.null(dim(y)) 

您将其用作逻辑测试。 if语句无法明确解释长度大于1的对象。考虑if (TRUE FALSE FALSE TRUE) <do something>。你应该什么时候做那件事?

如果您想确保y没有多个维度,请执行

if(length(dim(y)) > 1){
    stop("message")
}

答案 1 :(得分:1)

您的代码中存在许多问题:

1)if语句中的x[1:length(x)]是什么意思?现在这些都没有意义,可以放弃:

  n<-length(x)
  i<-1:n 
  x[i]

2)如果语句接受逻辑参数而不是逻辑矢量,您可以考虑添加all() any()

  if(all(x < y)) 1 else {0}

或使用ifelse()语句进行作业

3)最后,根据我的理解,你会使事情复杂化,整个事情可以写成一行:

  sum(x < y)/length(x)