将向量中的值替换为0(样本除外)并将其循环

时间:2018-10-13 15:47:25

标签: r loops vector sample

我有一个向量,在本例中为“ dist_SLA”,我要对其执行以下操作:

  • 我想从尺码= 1到所有“ dist_SLA”值都采样(因此,尺码= 1,尺码= 2,尺码= 3,.....尺码=“ dist_SLA”)。 ->我称样本向量为sample.i

  • 然后,我想使用此方法将所有样本矢量“ sample.i”转换为新的样本:应该对矢量进行转换,以便替换在sample.i中未采样的所有“ dist_SLA”值。乘以0,这样就给了我一个包含采样值和零的向量。我将新向量称为“ sp.i”

  • 最后,我要创建一个列表,其中将所有不同的变换矢量“ sp.i”和“ dist_SLA”的lm的所有计算出的R平方结合在一起(因此,sp.1的R平方与“ dist_SLA” + sp.2的R平方加上“ dist_SLA”,等等)

我尝试了以下方法:

    import java.util.*;
public class Crypto {
    public static void main(String[] args){
        Scanner input = new Scanner(System.in);
        System.out.print("Please insert the text you wish to encrypt: ");
        String text = input.nextLine();
        text = normalizeText(text);
        System.out.println(text);
    }

    public static String normalizeText(String s){
            s.replace(" ","");
            s.replace("(","");s.replace(")","");s.replace(".","");
            s.replace(",","");s.replace("?","");s.replace("!","");
            s.replace(":","");s.replace("'","");s.replace("\"","");
            s.replace(";","");

            s.toUpperCase();
            return s;



    }
}

但这给了我一些问题:

  • “ ifelse”函数为我提供了一个向量,其中与样本值相同的所有值都不会在“ sp_1”中被0代替。因此,我想要一个向量,其中仅样本值不被0代替,而其他样本值被0代替。

  • 循环无法以这种方式工作,但我不知道如何进行。

我该如何解决?

2 个答案:

答案 0 :(得分:0)

我相信以下内容可以满足您的需求。
请注意,您不需要sample.i向量,仅会保存r平方值。因此,您只需要一个向量即可将其保存。

set.seed(3520)    # Make the results reproducible

dist_SLA <-  c(1, 4, 9, 3, 4, 6)

n <- length(dist_SLA)
fit <- numeric(length(dist_SLA))

for (i in seq_along(dist_SLA)){
  smpl <- sample(n, size = i)
  sp <- numeric(length(dist_SLA))
  sp[smpl] <- dist_SLA[smpl]
  lmi <- lm(dist_SLA ~ sp)
  fit[i] <- summary(lmi)$r.squared
} 

fit
#[1] 0.6480000 0.0200000 0.1739130 0.7667327 0.8711111 1.0000000

答案 1 :(得分:0)

尝试一下:

set.seed(123)
sample_ <- sample(dist_SLA, size = 3)
sample_
[1] 4 3 6
dist_SLA <-  c(1, 4, 9, 3, 4, 6)

那么这会给你

dist_SLA==sample_
[1] FALSE FALSE FALSE FALSE FALSE  TRUE

使用%in%给出:

dist_SLA %in% sample_
[1] FALSE  TRUE FALSE  TRUE  TRUE  TRUE

ifelse(dist_SLA %in% sample_, dist_SLA, 0)
[1] 0 4 0 3 4 6

因此,您的循环看起来像是要保存供以后使用的

set.seed(123)

dist_SLA <-  c(1, 4, 9, 3, 4, 6)
lm_  <- vector(mode = "list", length = length(dist_SLA))
fit_ <- vector(mode = "numeric", length = length(dist_SLA))

for(x in 1 : length(dist_SLA)){

  sample_ <- sample(dist_SLA, size = x)
  spi     <- ifelse(dist_SLA %in% sample_, dist_SLA, 0)
  lm_[[x]]  <- lm(dist_SLA ~ spi)
  fit_[x] <- summary(lm_[[x]])$r.squared
}