我在创建公式方面遇到了一些问题,它比较了两个数字,并在最后的程序中对所有数字进行排序。我创建了(有)带有值x
的向量x <- c(5, 10, 2, 35, 1)
和带有名称的函数:SortFunc(x)
最后的结果应如下所示:
[1] 1 2 5 10 35
我做了这个功能:
SortFunc <- function(x) {
n <- length(x)
repeat {
spr <- FALSE
n <- n-1
for(i in 1:n) {
if ( x[i] > x[i+1] ) {
t <- x[i]
x[i] <- x[i+1]
x[i+1] <- t
spr <- TRUE
}
}
if (!spr) break;
}
x
}
当我运行SortFunc(x)
时,我收到此错误:
Error in if (x[i] > x[i + 1]) { : argument is of length zero
有人洗吗?如果我更改了x <- c(5,8,7,30,1,100)
*之类的向量,我会得到真正的解([1] 1 5 7 8 30 100)
答案 0 :(得分:2)
这是每个循环的函数输出:
R > SortFunc(c(5,10,2, 35, 1))
[1] 5 2 10 1 35
[1] 2 5 1 10 35
[1] 2 1 5 10 35
[1] 1 2 5 10 35
Error in if (x[i] > x[i + 1]) { (from #7) : argument is of length zero
所以在4个循环之后,它已被排序,但在最后一个循环中,它们仍然改变了顺序,因此spr
是True
,因此它不会中断。相反,它会继续尝试n <- n-1
制作n = 0
,这会导致错误。
略微修改您的代码,它可以工作:
SortFunc <- function(x) {
n <- length(x)
repeat {
spr <- FALSE
for(i in 1:(n-1)) {
if ( x[i] > x[i+1] ) {
t <- x[i]
x[i] <- x[i+1]
x[i+1] <- t
spr <- TRUE
}
}
n <- n-1
if (n == 1 | !spr) break;
}
x
}