我在R中运行这段代码:
set.seed(4997)n = 50data1< - runif(n,min = 0,max = 1)data2< - runif(n,min = 2,max = 5)sample.data< - c(data1,data2)样本数据y< - 数字(2 * …
那是因为你的 n 是50而是 length(sample.data) 是100.当你从中循环 1:n 它仅对前50个值进行迭代,并保持剩下的50个值(即0)。
n
length(sample.data)
1:n
你需要的是什么
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 并将上面的代码简化为
for
ifelse
ifelse(sample.data < 1, -1, 1)
您的矢量样本数据大小为2 * n,因此您的for循环应为
for(i in 1: (2*n)){ if((sample.data[i] < 1)) {y[i] <- -1 } else if ((sample.data[i] > 1)){ y[i] <- 1} } > 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 [25] -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 [49] -1 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 [73] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 [97] 1 1 1 1