我可以制作这段代码:
#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
}
}
它给了我这个:
有没有办法用“粘贴”和循环变量来做?
在MATLAB中,eval
将构造的字符串视为一行代码,因此我可以创建句子,然后在代码中运行它们。
答案 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;
}
但正如其他人所说,这并不值得推荐。