如何使用组合名称重命名r中的变量

时间:2017-05-11 12:55:03

标签: r variables renaming

我可以制作这段代码:

#set seed
set.seed(848)

#make variables (similar, not same)
myvar_a <- rnorm(n = 100, mean = 1, sd = 2)
myvar_b <- rnorm(n = 100, mean = 2, sd = sqrt(3))
myvar_c <- rnorm(n = 100, mean = 4, sd = sqrt(5))
myvar_d <- rnorm(n = 100, mean = 8, sd = sqrt(8))

#transform variables
for(i in 1:4){
     if(i ==1){
          myvar_1 <- myvar_a
     } else if (i==2) {
          myvar_2 <- myvar_b
     } else if (i==3) {
          myvar_3 <- myvar_b
     }  else {
          myvar_4 <- myvar_b
     } 
}

它给了我这个:

enter image description here

有没有办法用“粘贴”和循环变量来做?

在MATLAB中,eval将构造的字符串视为一行代码,因此我可以创建句子,然后在代码中运行它们。

2 个答案:

答案 0 :(得分:1)

l <- list()

#transform variables
for(i in 1:4){
  if(i ==1){
    l[[paste0("myvar_", i)]] <- myvar_a
  } else if (i==2) {
    l[[paste0("myvar_", i)]] <- myvar_b
  } else if (i==3) {
    l[[paste0("myvar_", i)]] <- myvar_b
  }  else {
    l[[paste0("myvar_", i)]] <- myvar_b
  } 
}

print(l)

当然,有经验的R用户会使用lapply代替for循环。

答案 1 :(得分:1)

你可以这样做:

public static double[] read(double[] array, int range) { 
    double[] result = new double[array.length / range + (array.length % range > 0 ? 1 : 0 )]; //Just add one cell if the length is not a multiple of the range


    double max = array[0];
    int i = 1;
    while (i < array.length) {
        if (i % range == 0) { //Next range
            result[i / range - 1] = max; //Save last
            max = array[i]; //Get current
        } else if (array[i] > max) {
            max = array[i];
        }
        ++i;
    }
    result[result.length - 1] = max; //for the last range
    return result;
}

但正如其他人所说,这并不值得推荐。