我做了一个函数来计算I的总和(Xi
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;
但是当我使用输入(rnorm(11),6)运行它时,我收到此错误:
Warning message:
In if (x[i] < y) 1 else { :
the condition has length > 1 and only the first element will be used
&#13;
有什么想法吗?如果它显而易见,我很抱歉。 (我也不想使用for循环)
答案 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)