如何在R函数中使用lappy并转换回int格式?
我有测验数据,我想在R中打分,所以我写了一个ScoreQuike函数:如何在R函数中使用lappy并转换回int格式?,r,list,function,lapply,R,List,Function,Lapply,我有测验数据,我想在R中打分,所以我写了一个ScoreQuike函数: ScoreQuiz <- function(x) { #Q1 Ans: C; Q2 Ans: D x$Q1_Score <- lapply(x[,"Q1"], function(x) {as.integer(x == "C")} ) x$Q2_Score <- lapply(x[,"Q2"], function(x) {as.
ScoreQuiz <- function(x) {
#Q1 Ans: C; Q2 Ans: D
x$Q1_Score <- lapply(x[,"Q1"], function(x) {as.integer(x == "C")} )
x$Q2_Score <- lapply(x[,"Q2"], function(x) {as.integer(x == "D")} )
## Doesn't work
## x$Q1_Score <- unlist(x$Q1_Score)
score.list <- c("Q1_Score", "Q2_Score")
# commented because of error
#x$Total_Score <- apply(x[score.list], 1, sum)
return(x)
}
df <- data.frame("SubID" = 1:12, "Q1" = c("A","C","D"), "Q2"= c("D","A","B"))
ScoreQuiz(df)
所以我无法计算函数内的总分。
但是,我可以在函数之外取消列表,然后计算总分
是否可以在函数中取消列表,或者更好的是,在不首先使用列表的情况下获取I get Q1_分数?在这种情况下,您不需要
lappy
:
ScoreQuiz <- function(x) {
x$Q1_Score <- as.integer(x$Q1 == 'C')
x$Q2_Score <- as.integer(x$Q2 == 'D')
return(x)
}
str(ScoreQuiz(df))
#'data.frame': 12 obs. of 5 variables:
# $ SubID : int 1 2 3 4 5 6 7 8 9 10 ...
# $ Q1 : chr "A" "C" "D" "A" ...
# $ Q2 : chr "D" "A" "B" "D" ...
# $ Q1_Score: int 0 1 0 0 1 0 0 1 0 0 ...
# $ Q2_Score: int 0 0 1 0 0 1 0 0 1 0 ...
scorequick在这种情况下,您不需要lappy
:
ScoreQuiz <- function(x) {
x$Q1_Score <- as.integer(x$Q1 == 'C')
x$Q2_Score <- as.integer(x$Q2 == 'D')
return(x)
}
str(ScoreQuiz(df))
#'data.frame': 12 obs. of 5 variables:
# $ SubID : int 1 2 3 4 5 6 7 8 9 10 ...
# $ Q1 : chr "A" "C" "D" "A" ...
# $ Q2 : chr "D" "A" "B" "D" ...
# $ Q1_Score: int 0 1 0 0 1 0 0 1 0 0 ...
# $ Q2_Score: int 0 0 1 0 0 1 0 0 1 0 ...
记分测验
ScoreQuiz <- function(x) {
x$Q1_Score <- as.integer(x$Q1 == 'C')
x$Q2_Score <- as.integer(x$Q2 == 'D')
return(x)
}
str(ScoreQuiz(df))
#'data.frame': 12 obs. of 5 variables:
# $ SubID : int 1 2 3 4 5 6 7 8 9 10 ...
# $ Q1 : chr "A" "C" "D" "A" ...
# $ Q2 : chr "D" "A" "B" "D" ...
# $ Q1_Score: int 0 1 0 0 1 0 0 1 0 0 ...
# $ Q2_Score: int 0 0 1 0 0 1 0 0 1 0 ...