0

我有一个包含数字元素的向量,如下所示:

jnk1<-c(0,2,1,3,4,2,1,2)

在另一个字符向量中,我想分配与数字向量 jnk1 的每个元素相对应的颜色。

m<-c("red","green","blue","brown","purple","green","blue","green")

我使用 for 循环编写了以下代码来自动化该过程:

m<-as.character()
for (i in 1:length(jnk1)){
for (j in 1:length(jnk1)){
for (k in 1:length(jnk1)){
for (l in 1:length(jnk1)){
for (o in 1:length(jnk1)){
if (jnk1[i]==0){
m[i]<-c("red")}
if (jnk1[j]==1){
m[j]<-c("blue")}
if (jnk1[k]==2){
m[k]<-c("green")}
if (jnk1[l]==3){
m[l]<-c("brown")}
if (jnk1[o]==4){
m[o]<-c("purple")}}}}}}

上面的代码可以完成少量迭代的工作,但对于较大的迭代,它的效率非常低且耗时。是否可以使用更高效的代码完成工作?

4

1 回答 1

5

一种非常简单的方法是使用查找向量(请注意,这+1是必要的,因为R索引从 1 开始,向量中的最小值为 0)。

lookup <- c('red', 'blue', 'green', 'brown', 'pink')
m <- lookup[jnk1+1]

还值得注意的是,您可以使用单个 for 循环,您不需要在每个if条件中使用单独的索引。

于 2020-01-02T14:51:34.290 回答