R:带有For循环的简单函数
我有一个基本的问题,很遗憾我搞不懂。我有一组1s和0s的数值向量,它们存储在下面的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
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
连续数字。只是为了显示答案与初始向量匹配
Afor
循环(只是为了回答而回答不正确)
求和虽然这不是最有效的方法(参见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)