[英]Creating a sort function in R
我正在尝试在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
}
我知道我不擅长编程,但希望能在你的帮助下改进它。 谢谢你纠正我。
您的代码存在一些语法问题。 首先,你做了一个常见的错误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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.