如何在不使用 i 和 j 的所有组合的情况下在列范围上使用 for 循环进行绘图?

How to use a for-loop on column ranges for plotting without using all combination of i and j?

我正在尝试使用嵌套的 for 循环打印李克特图。嗯,它有效,但我希望 for 函数不要“重新获取”ij,这意味着我想绘制 1:5、6:10, 11:15, 等等。但并非这些变量的所有可能组合。

library(likert)

for(i in c(1, 6, 11, 16)){
  for (j in c(5, 10, 15, 20)) {
    print(plot(likert(data.likert[, i:j])))
  }
} 

有更好的主意吗?

来个数据例子(抱歉有点长):

data.likert <- structure(list(
  Q1 = structure(c(5L,5L, 5L, 4L, 5L, 5L, 5L, 5L, 5L, 5L), .Label = c("Stimme überhaupt nicht zu", "Stimme eher nicht zu", "Weder noch", "Stimme eher zu", "Stimme voll und ganz zu", "Weiß nicht/keine Angabe"), class = "factor"), 
 Q2 = structure(c(5L,5L, 5L, 4L, 5L, 5L, 5L, 5L, 5L, 5L), .Label = c("Stimme überhaupt nicht zu", "Stimme eher nicht zu", "Weder noch", "Stimme eher zu", "Stimme voll und ganz zu", 
"Weiß nicht/keine Angabe"), class = "factor"), 
Q3 = structure(c(2L, 4L, 5L, 5L, 4L, 4L, 5L, 4L, 4L, 4L), .Label = c("Stimme überhaupt nicht zu", "Stimme eher nicht zu", "Weder noch", "Stimme eher zu", "Stimme voll und ganz zu", 
"Weiß nicht/keine Angabe"), class = "factor"), 
Q4 = structure(c(1L, 4L, 2L, 2L, 2L, 1L, 3L, 3L, 2L, 3L), .Label = c("Stimme überhaupt nicht zu", 
"Stimme eher nicht zu", "Weder noch", "Stimme eher zu", "Stimme voll und ganz zu", "Weiß nicht/keine Angabe"), class = "factor"), 
Q5 = structure(c(1L, 2L, 2L, 4L, 2L, 1L, 4L, 2L, 2L, 5L), .Label = c("Stimme überhaupt nicht zu", 
"Stimme eher nicht zu", "Weder noch", "Stimme eher zu", "Stimme voll und ganz zu", 
"Weiß nicht/keine Angabe"), class = "factor"), 
Q6 = structure(c(1L, 
1L, 1L, 2L, 1L, 1L, 2L, 1L, 1L, 1L), .Label = c("Stimme überhaupt nicht zu", 
"Stimme eher nicht zu", "Weder noch", "Stimme eher zu", "Stimme voll und ganz zu", 
"Weiß nicht/keine Angabe"), class = "factor"), 
Q7 = structure(c(4L, 3L, 4L, 1L, 3L, NA, 2L, 2L, 2L, NA), .Label = c("Stimme überhaupt nicht zu", 
"Stimme eher nicht zu", "Weder noch", "Stimme eher zu", "Stimme voll und ganz zu", "Weiß nicht/keine Angabe"), class = "factor"), 
Q8 = structure(c(4L, 4L, 4L, 2L, 2L, 4L, 1L, NA, 2L, NA), .Label = c("Stimme überhaupt nicht zu", "Stimme eher nicht zu", "Weder noch", "Stimme eher zu", "Stimme voll und ganz zu", 
"Weiß nicht/keine Angabe"), class = "factor"), 
Q9 = structure(c(3L, 2L, 2L, 5L, 3L, 5L, 2L, 3L, 4L, 4L), .Label = c("Stimme überhaupt nicht zu", 
 "Stimme eher nicht zu", "Weder noch", "Stimme eher zu", "Stimme voll und ganz zu", 
 "Weiß nicht/keine Angabe"), class = "factor"), 
Q10 = structure(c(5L, 5L, 2L, 4L, 4L, 5L, 3L, 5L, 4L, 5L), .Label = c("Stimme überhaupt nicht zu", 
 "Stimme eher nicht zu", "Weder noch", "Stimme eher zu", "Stimme voll und ganz zu", 
 "Weiß nicht/keine Angabe"), class = "factor"), 
Q11 = structure(c(5L,5L, 5L, 5L, 5L, 5L, 5L, 4L, 5L, 5L), .Label = c("Stimme überhaupt nicht zu", 
"Stimme eher nicht zu", "Weder noch", "Stimme eher zu", "Stimme voll und ganz zu", 
"Weiß nicht/keine Angabe"), class = "factor"), 
Q12 = structure(c(5L, 5L, 2L, 4L, 4L, 5L, 4L, 5L, 5L, 5L), .Label = c("Stimme überhaupt nicht zu", 
 "Stimme eher nicht zu", "Weder noch", "Stimme eher zu", "Stimme voll und ganz zu", 
 "Weiß nicht/keine Angabe"), class = "factor"), 
Q13 = structure(c(5L, 5L, 4L, NA, 4L, 5L, 5L, NA, 3L, 5L), .Label = c("Stimme überhaupt nicht zu", 
 "Stimme eher nicht zu", "Weder noch", "Stimme eher zu", "Stimme voll und ganz zu", 
 "Weiß nicht/keine Angabe"), class = "factor"), 
Q14 = structure(c(2L, 2L, 4L, 1L, 4L, 1L, 4L, 3L, 2L, 4L), .Label = c("Stimme überhaupt nicht zu", 
 "Stimme eher nicht zu", "Weder noch", "Stimme eher zu", "Stimme voll und ganz zu", 
 "Weiß nicht/keine Angabe"), class = "factor"), 
Q15 = structure(c(1L,  1L, 4L, 2L, 2L, 1L, 2L, NA, 1L, 2L), .Label = c("Stimme überhaupt nicht zu", 
 "Stimme eher nicht zu", "Weder noch", "Stimme eher zu", "Stimme voll und ganz zu", 
 "Weiß nicht/keine Angabe"), class = "factor")), row.names = c(NA, 
 10L), class = "data.frame")

如果我们需要从相应的元素中取出序列,使用Map

Map(function(i, j) plot(likert(data.likert[, i:j])),
      c(1, 6, 11, 16), c(5, 10, 15, 20))

注意:在 OP 的 dput 数据集中,只有 15 列(假设它只是原始数据的一个子集)


或者在 for 循环中相同的是创建两个 vector 序列并循环其中一个向量的序列,根据序列索引获取向量值,return 序列 (:),提取列,应用 likertplot

v1 <- c(1, 6, 11, 16)
v2 <- c(5, 10, 15, 20)
for(i in seq_along(v1)) {
    print(plot(likert(data.likert[, v1[i]:v2[i])))
}

您可以只取一个 v 并添加四个以获得第二个值。

for (i in c(1, 6, 11)) print(plot(likert(data.likert[, i:(i + 4)])))

或者,使用 lapply.

lapply(c(1, 6, 11), \(i) plot(likert(data.likert[, i:(i + 4)])))