Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 前一个区块中设置的变量仅在R区块的情况下继承(R标记)_Python_R_Knitr_R Markdown - Fatal编程技术网

Python 前一个区块中设置的变量仅在R区块的情况下继承(R标记)

Python 前一个区块中设置的变量仅在R区块的情况下继承(R标记),python,r,knitr,r-markdown,Python,R,Knitr,R Markdown,根据:Rmarkdown处理许多语言 然而,我注意到只有R!区块似乎继承了先前区块的变量 例如,以下.Rmd文件: --- title: "Variables inheritance in next chunk" output: pdf_document --- ## Set variable ```{r defineVector} w = as.vector(c(2,6,7,5,7,8,5,7,6)) ``` ## Print mean ```{r meanValue, echo=TR

根据:Rmarkdown处理许多语言

然而,我注意到只有R!区块似乎继承了先前区块的变量

例如,以下.Rmd文件:

---
title: "Variables inheritance in next chunk"
output: pdf_document
---

## Set variable

```{r defineVector}
w = as.vector(c(2,6,7,5,7,8,5,7,6))
```

## Print mean

```{r meanValue, echo=TRUE}
mean(w)
```
汇编得很好:

但是与Python完全对应(Python块而不是R块):

---
标题:“下一块中的变量继承”
输出:pdf\U文件
---
##设置变量
```{python defineVector}
w=[2,6,7,5,7,8,5,7,6]
```
##打印平均数
```{python meanValue,echo=TRUE}
#以下行导致:NameError:未定义名称“w”
打印(总和(w)/浮动(长度(w)))
#但是如果我重复第行:w=[2,6,7,5,7,8,5,7,6]
#打印前,文档工作-编译为PDF
```
给出错误(NameError:未定义名称“w”):


是否有任何选项可以将所有块设置为所有语言的行为方式完全相同?

答案实际上在OP提供的链接中:(我的重点)

除了engine='R'(默认值),所有块都在单独的会话中执行,因此变量不能直接共享。如果我们想利用在以前的块中创建的对象,我们通常必须将它们写入文件(作为副作用)。对于bash引擎,我们可以使用Sys.setenv()将变量从R导出到bash(示例)。另一种方法是使用(实验性)runr包


下面是一个小插曲。

糟糕的python支持是一个长期存在的问题,我计划在不久的将来用新包解决这个问题。
---
title: "Variables inheritance in next chunk"
output: pdf_document
---

## Set variable

```{python defineVector}
w=[2,6,7,5,7,8,5,7,6]
```

## Print mean

```{python meanValue, echo=TRUE}
# Following line results in: <module> NameError: name 'w' is not defined
print(sum(w) / float(len(w)))
# However if I repeat line: w=[2,6,7,5,7,8,5,7,6]
# before print, document works - compiles to PDF
```