R中函数计算中的多行

时间:2013-03-07 16:28:11

标签: r function

我有以下数据:

measurement <- c(1:30)
angle <- rnorm(30, 0, 0.4)
data.1 <- data.frame(measurement, angle)

我想创建一个为四种不同场景返回TRUE值的函数:

   1. When 'angle' >  0.3 
or 2. When 'angle' < -0.3 
or 3. When 'angle' + the previous 'angle' >  0.3 
or 4. When 'angle' + the previous 'angle' < -0.3 

我用for循环尝试了它,我已经尝试了以下方式,但我只是不知道如何包含角度和角度的总和,这是在一个步骤之前测量的(所以我在这里做错了但是我怎样才能改进它?最好是在计算上最不费劲的方式,因为我使用海量数据集):

n<-data.1$angle
function1 <- function(n){
    return(n>0.3 | n<(-0.3) | (n+(n-1))>(0.3) | (n+(n-1))<(-0.3))
}

很抱歉,作为R新手,但在漫步到R文档的迷宫之后,我没有别的办法,只能在这里问一下。谢谢你的帮助!

1 个答案:

答案 0 :(得分:6)

您可以采用矢量化格式,而不是逐个为每个角度执行此操作。

abs(data.1$angle) > 0.3 | abs(data.1$angle + c(0, head(data.1$angle,-1))) > 0.3

abs(data.1 $ angle)&gt; 0.3 - 第一和第二条件 abs(data.1 $ angle + c(0,head(data.1 $ angle,-1)))&gt; 0.3 - 获取所有角度并使用c(0, head(., -1))将前一个角度添加到其中。然后再次使用abs检查0.3和-0.3

我明白了:

# [1] FALSE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE
# [15]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE  TRUE  TRUE
# [29]  TRUE  TRUE