如何使用if语句增加r中的两个变量?

Rya*_*ing 1 if-statement r increment

我使用以下方法生成600长度样本:

x <- rnorm(600, mean = 30, sd = 10)
Run Code Online (Sandbox Code Playgroud)

然后使用以下方法制作另一个600长度列表

y = ((x-30)/10)
Run Code Online (Sandbox Code Playgroud)

并且我的计划是使用if语句来测试y是否大于1.96并且如果-y小于1.96并且如果发生这种情况则将变量a增加1并且如果这不发生则将变量b增加1.

我试过以下的事情:

a = 0
b = 0

ifelse(y > 1.96, inc(a) <- 1, inc(b) <- 1)
ifelse(-y < -1.96, inc(a) <- 1, inc(b) <- 1)
Run Code Online (Sandbox Code Playgroud)

inc(a)< - 1中的错误:找不到函数"inc < - "inc(b)中的错误< - 1:找不到函数"inc < - "

ifelse(y > 1.96, '+'(a) <- 1, '+'(b) <- 1)
ifelse(-y < -1.96, '+'(a) <- 1, '+'(b) <- 1)
Run Code Online (Sandbox Code Playgroud)

+ a < - 1中的错误:找不到函数"+ < - "+ b中的错误< - 1:找不到函数"+ < - "

if (y > 1.96) {
  a = a + 1
}
if (-y < -1.96) {
  a = a + 1
} else{
  b = b + 1
}
Run Code Online (Sandbox Code Playgroud)

警告消息:在if(y> 1.96){:条件长度> 1且仅使用第一个元素

ifelse(y > 1.96, a <- a + 1, b <- b + 1)
ifelse(-y < -1.96, a <- a + 1, b <- b + 1)
Run Code Online (Sandbox Code Playgroud)

这几乎可以工作,但它给了我所有1的输出和:

  a
  # [1] 1
  b
  # [1] 1
Run Code Online (Sandbox Code Playgroud)

那么我怎么会增加变量或我做错了什么?

coa*_*ess 5

避免使用ifelse()这种计算.在这种情况下,最好使用R的向量化属性(例如,在仅R向量中没有"标量"),方法是获得TRUE/ FALSE值的向量,然后对这些TRUE值求和.

# Make the data
set.seed(1337)
x = rnorm(600, mean = 30, sd = 10) 

y = ((x-30)/10)

# Get Indicators (T/F)
v1 = y > 1.96

v2 = y < -1.96

# Sum over w.r.t to true cases
a = sum(v1) + sum(v2)

# Handle the false cases without resumming. 
b = 2*length(y) - a
Run Code Online (Sandbox Code Playgroud)

此外,在这里我们选择使用y < -1.96以获得适当的双方计数.