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)
那么我怎么会增加变量或我做错了什么?
避免使用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以获得适当的双方计数.