如何在R函数中使用lappy并转换回int格式?

如何在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.

我有测验数据,我想在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.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 ...