KableExtra и knitr: ошибка при разборе (Text = x, srcfile = src): неожиданный '=' - PullRequest
0 голосов
/ 26 сентября 2018

Я работаю с набором плоских данных («FSIflat»), который имеет страну (символ), индикатор (символ), код индикатора (символ), период времени (символ: например, 2010Q3, 2010M12, 2010) и значение (num) и тип времени («Ежеквартально», «Ежемесячно» или «Ежегодно»), и цель состоит в том, чтобы создавать таблицы в формате PDF, когда пользователи называют страну.Я пытался преобразовать кусок в функцию, но не смог.Оригинальный блок работает нормально, и он производит PDF.Но функция дала мне Ошибка в разборе (Text = x, srcfile = src) :: 3:16: неожиданный '=' .

Я новичок в R и все.Я потратил на это дни и не мог понять, что пошло не так.Было бы здорово, если бы кто-то мог помочь.Большое спасибо!

Кусок

newdf<-FSIflat%>%
  filter(Country.Name == "Australia", timetype == "Annual")%>%
  select(1:6,-2,-3)
All.Periods <- c(unique(newdf$Time.Period))
All.Periods <- tail(sort(All.Periods),10)
newdf<-newdf%>%
  filter(Time.Period %in% c(All.Periods))%>%
  spread(key=Time.Period, value=Value)%>%
  inner_join(indicatortable, by=("Indicator.Code"="Indicator.Code"))%>%
  arrange(Set, Level)%>%
  select(Set, Indicator, c(All.Periods))

kable(newdf, "latex", longtable = T, booktabs = T, align = c("c","l",rep("r",10)), caption="c(ftitle)", digits = 1)%>%
column_spec(1, width = "1em")%>%
column_spec(2,width = "16em")%>%
collapse_rows(columns = 1:2, latex_hline = "major", valign = "top", row_group_label_position = 'stack')%>%
kable_styling(latex_options = c("striped", "repeat_header"), full_width = T)

Функция

<<LoadCountryx>>=
LoadCountryx<-function(
fcountry, fdata, ffrequency, ftitle = paste("Latest ratios available for ", 
fcountry)
){if(ffrequency="Y"){
    newdf<-fdata%>%
      filter(Country.Name == fcountry, timetype == "Annual")%>%
      select(1:6,-2,-3)
    All.Periods <- c(unique(fdata$Time.Period))
    All.Periods <- tail(sort(All.Periods),10)
newdf<-newdf%>%
  filter(Time.Period %in% c(All.Periods))%>%
  spread(key=Time.Period, value=Value)%>%
  inner_join(indicatortable, by=("Indicator.Code" = "Indicator.Code"))%>%
  arrange(Set, Level)%>%
  select(Set, Indicator, c(All.Periods))

}else if(ffrequency="Q"){
    newdf<-filter(fdata,Country.Name == fcountry, timetype == "Quarterly")%>%
    select(1:6,-2,-3)
  All.Periods <- c(unique(fdata$Time.Period))
  All.Periods <- tail(sort(All.Periods),10)
newdf<-newdf%>%
  filter(Time.Period %in% c(All.Periods))%>%
    spread(key=Time.Period, value=Value)%>% 
    inner_join(indicatortable, by=("Indicator.Code" = "Indicator.Code"))%>%
    arrange(Set, Level)%>%
    select(Set, Indicator, c(All.Periods))
}else if(ffrequency="M"){
    newdf<-filter(fdata,Country.Name == fcountry, timetype == "Monthly")%>%
    select(1:6,-2,-3)
  All.Periods <- c(unique(fdata$Time.Period))
  All.Periods <- tail(sort(All.Periods),10)
newdf<-newdf%>%
  filter(Time.Period %in% c(All.Periods))%>%
  spread(key=Time.Period, value=Value)%>%
  inner_join(indicatortable, by=("Indicator.Code" = "Indicator.Code"))%>%
  arrange(Set, Level)%>%
  select(Set, Indicator, c(All.Periods))
}

kable(newdf, "latex", longtable = T, booktabs = T, align = c("c","l",rep("r",10)), caption=c(ftitle), digits = 1)%>%
column_spec(1, width = "1em")%>%
column_spec(2,width = "16em")%>%
collapse_rows(columns = 1:2, latex_hline = "major", valign = "top", row_group_label_position = 'stack')%>%
kable_styling(latex_options = c("striped", "repeat_header"), full_width = T)

  }


@

1 Ответ

0 голосов
/ 26 сентября 2018

Сообщение об ошибке было Error in parse(Text = x, srcfile = src)::3:16: unexpected '='., и это произошло в вашей функции, начиная с чанка <<LoadCountryx>>=.Вы можете найти место возникновения проблемы, используя 3:16 часть сообщения: это строка 3, столбец 16.

Строка 3 фрагмента:

){if(ffrequency="Y"){

(похожестрока 4 в вашем сообщении из-за переноса; часто подсчет строк немного сложен!)

В столбце 16 содержится знак равенства.Это недопустимо: как и в некоторых других языках, R использует «=» для присваивания и «==» для проверки равенства.Так что это источник вашей ошибки.

Я не вижу этой конкретной строки в первом блоке кода, поэтому я думаю, что тот факт, что это теперь функция, не имеет значения.

...