R:带有For循环的简单函数

R:带有For循环的简单函数,r,for-loop,R,For Loop,我有一个基本的问题,很遗憾我搞不懂。我有一组1s和0s的数值向量,它们存储在下面的return变量中,其总和存储在totals变量中。我想检查每个单独的向量,看看结果中是否有连续的零,然后返回发生这种情况的总次数。然而,我对for循环/函数非常生疏和/或不擅长,因此无法得到这个结果。下面是我的最新尝试。欢迎提出任何建议-感谢您的帮助 set.seed(1) return = ifelse(runif(10) <= 0.6, 1, 0) totals = sapply(1:10, funct

我有一个基本的问题,很遗憾我搞不懂。我有一组1s和0s的数值向量,它们存储在下面的
return
变量中,其总和存储在
totals
变量中。我想检查每个单独的向量,看看结果中是否有连续的零,然后返回发生这种情况的总次数。然而,我对for循环/函数非常生疏和/或不擅长,因此无法得到这个结果。下面是我的最新尝试。欢迎提出任何建议-感谢您的帮助

set.seed(1)
return = ifelse(runif(10) <= 0.6, 1, 0)
totals = sapply(1:10, function (x) sum(ifelse(runif(10)<=0.6,1,0)))

sums = function (x) { 
  g = 0
  for (i in 1:length(x)-1) {
    sum(ifelse (x[i]+x[i+1]=0,1,0)) 
  }
  return (g)
}
set.seed(1)

return=ifelse(runif(10)如果我们正在查找连续0出现的次数(即大于1)及其长度,则使用
rle

with(rle(return), lengths[values==0 & lengths > 1])
#[1] 4
返回
向量为

return
#[1] 1 1 1 0 1 0 0 0 0 1
现在,我们可以看到0的
4
连续数字。只是为了显示答案与初始
向量匹配


A
for
循环(只是为了回答而回答不正确)


求和虽然这不是最有效的方法(参见akrun的答案),但我们可以让您的for循环工作:

sums=function (x)
{ 
  g=0
  # watch your brackets! 1:3-1 returns c(0,1,2), not c(1,2)!
  for (i in 1:length(x)-1)  
  {
    # To test for equality, use a double ==, rather than a single.
    # also, your 'g' variable is not updated, which is what you want to do.
    sum(ifelse (x[i]+x[i+1]=0,1,0)) 
  }
  return (g) 
}
更正:

sums <-function(x)
{ 
  g=0
  for (i in 1:(length(x)-1)) 
    {
    g= g+ifelse(x[i]+x[i+1]==0,1,0)
    }
  return (g) 
}

求和谢谢。这些都是草率的错误-感谢您的帮助。虽然这似乎效率更低,但您是否建议进行另一个for循环,然后检查存储在“totals”变量中的十次运行中每次发生的次数?不,通常有一种比R中的for循环更好的方法。我修改了对的回答演示如何对十个随机向量调用函数。使用lappy语句我们创建十个向量,使用sapply我们将函数应用于这些向量。谢谢,明白了吗
sums <-function(x)
{ 
  g=0
  for (i in 1:(length(x)-1)) 
    {
    g= g+ifelse(x[i]+x[i+1]==0,1,0)
    }
  return (g) 
}
return=ifelse(runif(10)<=0.6,1,0)
sums(return)
totals = lapply(1:10, function (x) ifelse(runif(10) <= 0.6, 1, 0))
sapply(totals,sums)