귀하의 경우 {{ }}
에는 특별한 의미가 없습니다. 당신은 R에, 이들은
a<-1:10
a[a%%2==1]
a[a%%2=={{1}}]
a[a%%2==((1))]
당신은 너무 R.의 코드의 의미를 변경하지 않고 여분의 괄호/중괄호를 추가 할 수 있습니다 동일, 예를 들어
Dear `r paste(contacts$firstname[contacts$state == eachstate], sep = ", ")`,
과 같은 결과를 얻을 것이다 당신의 사례, 달리기
sampleRmd<-'Dear `r paste(contacts$firstname[contacts$state == eachstate], sep = ", ")`'
knit(text=sampleRmd, quiet=T)
는 똑같이 작동합니다. contacts
변수가 현재 환경으로 해석되는 것처럼 eachstate
변수도 마찬가지입니다. 중괄호를 사용하거나 사용하지 않더라도 차이는 없습니다. 직접 인라인 코드 블록을 구문 분석 함수를 호출 할 경우 이중 중괄호는 종종 "템플릿"언어로 사용되며 knitr
당신은을 정의 할 수 없다는 것입니다
knitr:::parse_only('paste(contacts$firstname[contacts$state == {{eachstate}}], sep = ", ")')
# expression(paste(contacts$firstname[contacts$state == {
# {
# eachstate
# }
# }], sep = ", "))
잡기에 무슨 일이 일어나고 있는지 더 분명 수 있습니다 템플릿. 이러한 템플릿은 기본적으로 R의 현재 범위에있는 변수 값으로 텍스트의 값을 바꿀 수있는 텍스트 청크입니다.이 대체는 knit_expand()
함수로 수행됩니다. 여기
sampleRmd<-'Dear `r paste(contacts$firstname[contacts$state == {{eachstate}}], sep = ", ")`'
contacts <- data.frame(
firstname=c("Adam","Becky","Clement","David"),
state=c("MI","CA","CA","MI")
)
eachstate <- "MI"
res <- knit_expand(text=sampleRmd)
res
# [1] "Dear `r paste(contacts$firstname[contacts$state == MI], sep = \", \")`"
기본적으로 그냥 {{
와 }}
사이에 아무것도 외모와 같은 이름의 변수의 값으로하는 것이 대체 귀하의 경우 최소한의 예입니다. 이 경우 {{eachstate}}
이이 예제에서 "MI"
인 eachstate
변수의 현재 값으로 바뀝니다. 이것은 R 코드가 실행되기 전에 수행됩니다. 당신이 knit()
하려고하면이 당신이 확장 기능은 MI의 리터럴 값에 넣어 때문에이 오류
knit(text=res)
# Error in NextMethod("[") : object 'MI' not found
를 얻을 않습니다 그것은 마치 어디 코드로 문자열. 가치를 인용하지 않았습니다. 템플릿을
sampleRmd<-'Dear `r paste(contacts$firstname[contacts$state == "{{eachstate}}"], sep = ", ")`'
res <- knit_expand(text=sampleRmd)
knit(text=res, quiet=T)
# [1] "Dear Adam, David"
으로 변경해야합니다.하지만 예제에서는 템플릿 기능을 사용하지 않고 있습니다. 기본적으로 R 표현식에 불필요한 기호를 추가하는 것입니다.
@Nicapyke 답변을 업데이트했습니다. 처음에는 내가 틀렸어. 중괄호는 실제로 당신의 예제에서 절대적으로 아무것도하지 않습니다. – MrFlick
이것은 훌륭한 답변입니다. @MrFlick! 사려 깊은 의견에 감사드립니다. 나는 당신의 지식을 전할 것입니다 ... 나는 슬라이드를 {{}}의 사용에 관해 준비 할 준비가되어 있습니다. 그리고 당신은 템플릿 언어로 그들의 사용법에 대해 내가 가진 것보다 훨씬 잘 설명해주었습니다. – mcjudd