سؤال

أنا أكتب حزمة 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))
```
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top