I am trying to print likert plots with a nested for-loop. Well, it works, but I would like the for
function to not "retake" the i
and j
, which means I want to plot 1:5, 6:10, 11:15, and so on. But not all possible combinations of these variables.
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])))
}
}
Any better ideas?
Here comes a data example (sorry it is a bit long):
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")
CodePudding user response:
You could just take a single v
and add four to get the second value.
for (i in c(1, 6, 11)) print(plot(likert(data.likert[, i:(i 4)])))
Or, using lapply
.
lapply(c(1, 6, 11), \(i) plot(likert(data.likert[, i:(i 4)])))
CodePudding user response:
If we need to take the sequence from corresponding elements, use Map
Map(function(i, j) plot(likert(data.likert[, i:j])),
c(1, 6, 11, 16), c(5, 10, 15, 20))
NOTE: In the OP's dput
dataset, there are only 15 columns (assuming that it is just a subset of the original data)
Or the same in a for
loop would be to create two vector
sequence and loop over the sequence of one of the vectors, get the vector values based on the sequence index, return the sequence (:
), extract the columns, apply likert
and plot
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])))
}