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