首页 > 解决方案 > 当我运行代码块时,一切正常,但是当我尝试编织时出现错误

问题描述

就像标题说的那样,当我在 R markdown 文件中运行代码时,一切正常,我没有收到任何错误,但是当我尝试 Knit 时出现错误。

这是它说第一个错误发生的代码块(这个失败显然会导致一整串其他错误,因为没有创建 dta1)。

dta1 <- df %>%
    group_by(z_assignment) %>% 
    summarise(Arrest = count(t_final == 1),
              Advise = count(t_final == 2),
              Separate = count(t_final == 3),
              Total = sum(Arrest, Advise, Separate)) %>%
    arrange(Separate) %>%
    bind_rows(summarise_all(., funs(if(is.numeric(.)) sum(.) else "Total")))

我得到的错误是这个

## Error: Problem with `summarise()` input `Arrest`.
## x no applicable method for 'group_vars' applied to an object of class "logical" 
## i Input `Arrest` is `count(t_final == 1)`.
## i The error occurred in group 1: z_assignment = "advise".

这些是我正在使用的库(我的设置块中有它们)

library(tidyverse)
library(AER)
library(stargazer)
library(haven)
library(lfe)
library(estimatr)
library(stringr) 
library(dplyr)
library(modelsummary)
library(ggplot2)
library(haven)

这是我正在使用的数据(这是导致错误的唯一代码块)


df <- read_dta("http://masteringmetrics.com/wp-content/uploads/2015/02/mdve.dta")

df <- df %>% 
  rename_all(tolower) %>% 
  mutate(z_assignment = case_when(
    t_random == 1 ~ "arrest",
    t_random == 2 ~ "advise",
    t_random == 3 ~ "separate"
  ),
  d_actual = case_when(
    t_final == 1 ~ "arrest",
    t_final == 2 ~ "advise",
    t_final == 3 ~ "separate",
    t_final == 4 ~ "other"
  ),
  z_coddled = ifelse(z_assignment %in% c("separate", "advise"),1,0),
  d_coddled = ifelse(d_actual %in% c("separate", "advise"),1,0)
  ) %>% 
  filter(d_actual != "other")

df <- df %>% 

  mutate( pz_separ=1/(1+exp(1.21)),
          pz_arrest=1/(1+exp(1.21+.9)),
          pz_advise=1/(1+exp(1.21+.21)),
          pd_separ=1/(1+exp(1.05)),
          pd_arrest=1/(1+exp(1.05+.82)),
          pd_advise=1/(1+exp(1.05+.46)),
          order = row_number()/n()) %>% 
  group_by(t_random) %>% 
  mutate(z_rank = row_number()/n()) %>% 
  ungroup() %>% 
  mutate(Y = ifelse( (z_assignment == "arrest" & z_rank < pz_arrest) |                 
                          (z_assignment == "advise" & z_rank < pz_advise) |
                          (z_assignment == "separate" & z_rank < pz_separ), 1,0)) %>% 
  select(t_random, z_assignment, t_final, d_actual, z_coddled, d_coddled, Y, v_race, s_race, weapon, s_chem, year, month)

那么我做错了什么/错过了什么?

标签: rr-markdown

解决方案


问题在于count期望 atibble/data.frame作为输入而不是列/向量。它应该是sum

library(dplyr)
df %>%
  group_by(z_assignment) %>% 
  summarise(Arrest = sum(t_final == 1),
          Advise = sum(t_final == 2),
          Separate = sum(t_final == 3),
          Total = sum(Arrest, Advise, Separate)) %>%
   arrange(Separate) %>%
   bind_rows(summarise_all(., funs(if(is.numeric(.)) sum(.) else "Total")))

-输出

# A tibble: 4 x 5
#  z_assignment Arrest Advise Separate Total
#  <chr>         <int>  <int>    <int> <int>
#1 arrest           91      0        1    92
#2 advise           19     84        5   108
#3 separate         26      5       83   114
#4 Total           136     89       89   314

推荐阅读