R 设置类并避免将输出从TIBLE转换为列表

R 设置类并避免将输出从TIBLE转换为列表,r,ggplot2,dplyr,R,Ggplot2,Dplyr,我正在尝试使用s3类来实现下面的函数。当我不添加类维度并单独运行每个部分时,它可以工作,但当我添加类命令时,它会将输出更改为列表,而不是TIBLE,然后命令的其余部分将无法工作。有人知道我怎么解决这个问题吗 当我尝试应用以下函数时,其返回: UseMethod中的错误(“Summary_”):没有适用于“Summary_”类对象的“Summary_”方法 项目% 选择(年份、等代码、rgdpna、rkna、emp、labsh)%>% 过滤器(年份>=1954, 年份% na.省略() #计算每个

我正在尝试使用s3类来实现下面的函数。当我不添加类维度并单独运行每个部分时,它可以工作,但当我添加类命令时,它会将输出更改为列表,而不是TIBLE,然后命令的其余部分将无法工作。有人知道我怎么解决这个问题吗

当我尝试应用以下函数时,其返回:

UseMethod中的错误(“Summary_”):没有适用于“Summary_”类对象的“Summary_”方法

项目%
选择(年份、等代码、rgdpna、rkna、emp、labsh)%>%
过滤器(年份>=1954,
年份%
na.省略()
#计算每个工人的实际产出和资本,取日志和
#获取百分比变化的第一个差异
数据%
变异(y_pc=log(rgdpna/emp),#每个工人的GDP
k#u pc=对数(rkna/emp),#每个工人的资本
a=1-labsh)%>%#计算股本
按年度安排(年度)%>%#订单
按(等位码)%>%分组#对于每个国家,计算以下值
变异(g=(y_-pc-lag(y_-pc))*100,计算人均GDP的增长
dk=(k#pc-lag(k#pc))*100,计算人均资本增长率
dsolow=g-a*dk)%>%#索洛残差
na.省略()

类(数据)Nice.我的好老朋友索洛增长模型…(

您的主要问题可以通过附加
类来解决,即通过执行
类(数据)%
过滤器(年份>=1954,
年份%
na.省略()
#计算每个工人的实际产出和资本,取日志和
#获取百分比变化的第一个差异
数据%
变异(y_pc=log(rgdpna/emp),#每个工人的GDP
k#u pc=对数(rkna/emp),#每个工人的资本
a=1-labsh)%>%#计算股本
按年度安排(年度)%>%#订单
按(等位码)%>%分组#对于每个国家,计算以下值
变异(g=(y_-pc-lag(y_-pc))*100,计算人均GDP的增长
dk=(k#pc-lag(k#pc))*100,计算人均资本增长率
dsolow=g-a*dk)%>%#索洛残差
解组()%>%
na.省略()
类别(数据)年份等位码rgdpna rkna emp labsh y_pc k_pc
#>1 1955 IRL 23016.36 0.07782067 1.194252 0.5573497 9.866440-2.730868
#>2 1956 IRL 22227.86 0.07958002 1.178225 0.5573497 9.845093-2.695001
#>3 1957 IRL 21593.21 0.07986675 1.135285 0.5573497 9.853251-2.654279
#>4 1958 IRL 21526.32 0.07999133 1.118528 0.5573497 9.865018-2.637851
#>5 1959 IRL 22753.12 0.08304243 1.110150 0.5573497 9.927963-2.592898
#>6 1960 IRL 23636.37 0.08525588 1.104913 0.5573497 9.970775-2.561865
#>a g dk dsolow
#> 1 0.4426503  5.8672548 6.944282  2.7933665
#> 2 0.4426503 -2.1347642 3.586724 -3.7224284
#> 3 0.4426503  0.8157955 4.072170 -0.9867516
#> 4 0.4426503  1.1767534 1.642884  0.4495303
#> 5 0.4426503  6.2944526 4.495221  4.3046418
#> 6 0.4426503  4.2812699 3.103357  2.9075680
绘图(项目)

非常好,谢谢!
project <- function(countries)
{
 if(!require(dplyr)){
  install.packages("dplyr")
  library(dplyr)}
  
if(!require(ggplot2)){
  install.packages("ggplot2")
  library(ggplot2)}
  
if(!require(pwt9)){
    install.packages("pwt9")
    library(pwt9.1)}
  
  data("pwt9.1")

#first subsetting the data set to the variables required
  
data <- pwt9.1 %>%
  filter(country %in% countries) %>%
  select(year,isocode,rgdpna, rkna, emp, labsh) %>%
  filter(year >= 1954,
         year<= 2017)%>%
  na.omit()

#calculating the real output and capital per worker, taking the logs and the 
#first difference to obtain percentage changes

data <- data %>%
  mutate(y_pc = log(rgdpna / emp), #GDP per worker
         k_pc = log(rkna / emp), #Capital per worker
         a = 1-labsh) %>% #Calculate the capital share
  arrange(year) %>% #order by year
  group_by(isocode) %>% #for each country calculate the following
  mutate(g=(y_pc - lag(y_pc))*100, # calculating the growth of GDP per capita
         dk = (k_pc - lag(k_pc))*100, # calculating the growth rate of capital per capita
         dsolow = g - a*dk) %>% #the solow residual
  na.omit()


  class(data) <- "growth_ind"
  print(data)
}

print.growth_ind <- function(data)
{
  return(data)
}

summary.growth_ind <- function(data)
{
  solow <- data %>%
  summarise("Growth rate"=mean(g),
            "Solow residual" = mean(dsolow),
            "Capital deepening" = mean(a*dk),
            "TFP share" = mean(dsolow) / mean(g),
            "Capital share" = mean(a))
  
  return(solow)
}

plot.growth_ind <- function(data)
{
  ggplot(data, aes(x = year, y = g, colour = isocode)) + 
  geom_line()+
  labs(title="Growth rate comparison",
       subtitle = "Growth rate per capita for each country from 1954 to 2017",
       caption = "Data taken from Penn World Table 9.1",
       x="Year",
       y="Growth rate")
}

proj <- project(c("Ireland"))
summary(proj)
print(proj)
plot(proj)