【问题标题】:How to use lapply and convert back to int format in R function? [duplicate]如何在 R 函数中使用 lapply 并转换回 int 格式? [复制]
【发布时间】:2020-11-12 23:13:09
【问题描述】:

我有想要在 R 中评分的测验数据,所以我编写了一个 ScoreQuiz 函数:

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)

结果

 x$Q1_Score <-  lapply(x[,"Q1"], function(x) {as.integer(x == "C")} )

返回一个列表

$ Q1_Score:List of 12
  ..$ : int 0
  ..$ : int 1
  

所以我无法计算函数内的总分。 但是,我可以在函数之外取消列出,然后计算总分。

是否可以在函数内部取消列出,或者更好的是,让我在不使用列表的情况下获得 Q1_Score?

【问题讨论】:

    标签: r list function lapply


    【解决方案1】:

    在这种情况下你不需要lapply

    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 ...
    

    【讨论】:

      猜你喜欢
      • 2020-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-16
      • 2017-09-01
      相关资源
      最近更新 更多