最近在啃《R语言编程艺术》,今天主要记录一下几个实战的小栗子。
1:如何用代码判断一个向量里的奇数和偶数的个数?
2:如何计算为1的游程?(在一个由1,0组成的序列中,一个连续由1或者是0组成的串为游程)这里以计算有多少个1为例
3:如何对2的代码进行优化?
4:预测离散值的时间序列
1:如何用代码判断一个向量里的奇数和偶数的个数?
oddcount <- function(x) {
k <- 0 # assign 0 to k
for (i in x) {
if (i %% 2 ==1) k <- k+1 # then k +1
}
return(k)
}
2:如何计算为1的游程?(在一个由1,0组成的序列中,一个连续由1或者是0组成的串为游程)这里以计算有多少个1为例
findsame <- function(x,y) {
a <- length(x)
run <- NULL
for (i in a+y-1) {
if (all(x[i:i+y-1])==1) run <- c(run,i)
}
return(run)
}
(个人聚德个python里面append的方法很像!)
3:对2的代码进行优化(代码优化的核心思想是利用预设内存的方法)
findruns1 <- function(x,k) {
n <- length(x)
runs <- vector(length=n) #定义了一个原始向量
count <- 0
for (i in 1:(n-k+1)){
if (all(x[i:(i+k-1)]==1)) {
count <- count+1 #数字加和
runs[count]<- i #进行向量的填充
}
}
if(count >0) {
runs <- runs[1:count]
} else runs <- NULL
return(runs)
}
这个代码的思想就是可以先预设一个向量框,然最后同属输出向量框中有用的信息来对向量框进行删减。
在这个例子中,向量的填充很有用,然后根绝填充的结果进行结果的有用输出
3:给出一系列的0,1的向量集合,我们可以根绝前面几个数字来预后后面0,1的走向吗?这里我们将使用“过半规则‘’
pred <- function(x,y){
a <- length(x)
b <- vector(length = a-y)
k <- y/2
for (i in 1:(a-y)){
if(sum(x[i:(i+(y-1))])>= k) b[i]=1 else b[i]=0
}
return(mean(abs(b-x[(k+1):a])))
}
运用了0-1的均值是1的比例
网友评论