كيفية استخدام الوسيطة البيئية في knit_child؟
-
21-12-2019 - |
سؤال
أنا أكتب حزمة R حيث لدي قالب Rmd:
طفل.رمد:
```{r}
print(x)
```
ومثل هذه الوظيفة:
child <- function(){
myenv <- new.env()
assign("x", 0, envir=myenv)
# knit:
output <- knit_child("child.Rmd", envir=myenv)
return(output)
}
ثم قمت بربط مثل هذا الملف:
```{r, echo=FALSE}
library(mypackage)
```
`r child()`
ولكن هذا لا يعمل، الإخراج هو:
print(x)
## Error: object 'x' not found
فيما يلي مثال قائم بذاته، دون تضمين أي حزمة، لا أعرف ما إذا كان هذا مكافئًا حقًا وما أحتاجه حقًا هو بنية الحزمة:
```{r}
child <- function(){
myenv <- new.env()
assign("x", 0, envir=myenv)
# knit:
output <- knit_child("child.Rmd", envir=myenv)
return(output)
}
```
`r child()`
المحلول
يجب أن يتم إصلاح هذا في نسخة التطوير ل نيتر (>= الإصدار 1.6.3): knit_child()
اكتسب حجة جديدة envir
, ، ويمكنك تمرير بيئة تعسفية إليها.
نصائح أخرى
knit_child
لا يبدو أن يمر envir
ل knit
.أنا لا أعرف حقا لماذا.
شيء واحد يمكنك القيام به هو التحرك myenv
خارج الوظيفة بحيث تكون متاحة للطفل.
```{r}
myenv <- new.env()
child <- function(){
assign("x", 0, envir=myenv)
# knit:
output <- knit_child("child.Rmd")
return(output)
}
```
`r child()`
Child.Rmd
```{r}
print(get('x', envir=myenv))
```
لا تنتمي إلى StackOverflow