我正在R中运行这段代码:
set.seed(4997)
n =50
data1 <- runif(n, min = 0, max = 1)
data2 <- runif(n, min = 2, max = 5)
sample.data <- c(data1,data2)
sample.data
y <- numeric(2*n)
for(i in 1:n){
if((sample.data[i] < 1)) {y[i] <- -1
} else if ((sample.data[i] > 1)) {y[i] <- 1}}
y
基本上,我想做的就是基于“ sample.data”的每个索引处的值为“ y”分配一个值。
我的逻辑似乎合法,但是输出不是我期望的:
> y
[1] -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
[29] -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0
[57] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
[85] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
我什至不知道零是如何实现的。
任何提示都很棒!谢谢!
那是因为您n
是50,而您是length(sample.data)
100。因此,当您从其1:n
循环时,仅对前50个值进行迭代,并保留其余50个值(即0)。
您需要的是
for(i in 1:length(sample.data)) {
if(sample.data[i] < 1)
y[i] <- -1
else if (sample.data[i] > 1)
y[i] <- 1
}
但是,您可以for
通过使用向量化来避免循环ifelse
并将上述代码简化为
ifelse(sample.data < 1, -1, 1)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句