【发布时间】:2019-08-22 22:17:10
【问题描述】:
我想扩展我编写的代码的可用性。更好的是,我想概括一下以备将来使用。
我正在使用 Rstudio。我已经重新编码了一个 100 维向量。值 1-10 已转换为恒等向量。例如,所有 1 的值现在都是向量,读取为 1 0 0 0 0 0 0 0 0 0,所有 2 的值现在读取为 0 1 0 0 0 0 0 0 0 0,依此类推。代码如下:
tens <- seq(from=1, to=10, by=1)
y <- sample(tens, size=100, replace=TRUE)
y
num.its <- 100
Y <- rep(0,num.its*10)
dim(Y) <- c(num.its,10)
I <- diag(10)
for(i in 1:100){
if(y[i]==1){
Y[i,] <- I[1,]
} else if (y[i]==2){
Y[i,] <- I[2,]
} else if (y[i]==3){
Y[i,] <- I[3,]
} else if (y[i]==4){
Y[i,] <- I[4,]
} else if (y[i]==5){
Y[i,] <- I[5,]
} else if (y[i]==6){
Y[i,] <- I[6,]
} else if (y[i]==7){
Y[i,] <- I[7,]
} else if (y[i]==8){
Y[i,] <- I[8,]
} else if (y[i]==9){
Y[i,] <- I[9,]
} else {
Y[i,] <- I[10,]
}
}
代码按计划运行。但是,如果我必须重新编码 1-2000 的值,那么我宁愿不写 2000 else if 语句。任何帮助,将不胜感激。谢谢!
【问题讨论】:
-
Y[i,] = I[min(y[i],10),]?也就是说,如果y[i]>0在所有情况下 -
感谢您的回复。我想要概括的是我可以拥有的 y 的不同值的数量。在这种特定情况下,我有 10 个不同的可能值要重新编码,但在另一种情况下,我可能有 100 或 200 个。谢谢
-
Y[i,] = I[y[i],]就是你要找的东西 -
请注意
min是复制代码行为所必需的,因为您使用else而不是else if作为最后一个条件,但您可以在此处将 10 提高到任意数字 -
@OganM
y中只有 10 个值,即1:10如果除了1:10之外还有其他值,那么min将被认为是必要的
标签: r for-loop if-statement