我正在尝试在R中编写排序函数
我知道有一个sort()
功能可以让事情变得简单。但我目前正在学习R并想尝试编写这个函数,这将有助于我理解R语言的循环,功能。以下是我的尝试。
我已输入x <- c(6,4,2,7)
,排序后应该成为x = (2,4,6,7)
myx<-function(x)
for(i in length(x))
{
if(x[i]>x[i+1])
{
tmp<-x[i]
x[i]<-x[i+1]
x[i+1]<-tmp
}
break
}
我知道我在编程方面表现不佳,但希望能在你的帮助下改进它。 谢谢你纠正我。
答案 0 :(得分:3)
您的代码存在一些语法问题。首先,你做了for (i in length(x))
而不是for (i in 1:length(x))
的常见错误;前者评估为for (i in 4)
,而您最有可能需要for (i in 1:4)
。但是,由于您在代码中调用了x[i + 1]
,因此您希望将循环范围修改为for (i in 1:(length(x)-1))
,否则会出现越界错误。此外,(一般来说)对象不会通过R函数中的引用进行修改,因此您需要在函数末尾隐式(x
)或显式(return(x)
)返回结果。
在概念层面,正如@ johnny838的评论所指出的那样,你的算法必须多次应用以获得完全排序的向量。试着尽可能地坚持上面的代码,这是让它工作的一种方法:
myx <- function(x) {
for (i in 1:(length(x) - 1)) {
if (x[i] > x[i+1]) {
tmp <- x[i]
x[i] <- x[i+1]
x[i+1] <- tmp
}
}
x
}
##
sortx <- function(x) {
while (is.unsorted(x)) {
x <- myx(x)
}
x
}
##
R> x
#[1] 6 4 2 7
R> sortx(x)
#[1] 2 4 6 7