0

我想学习Org Babel,所以我正在学习 Org中的代码块

我正在尝试执行基本教程中的脚本,但由于某种原因无法执行。

我应该将表格作为函数的输入。这是表格:

#+name: tbl-example-data()
#+begin_src R 
runif(n=5, min=0, max=1)
#+end_src

#+RESULTS: tbl-example-data
|  0.607781215803698 | 
|  0.157157169422135 |
|  0.675619817571715 |
| 0.0488600700628012 |
|  0.998780139256269 |

下一个函数是要执行的函数:

#+name: R-mean(x)
#+begin_src R 
mean(x)
#+end_src

当我尝试通过按下运行它时,C-c C-c我得到

块“R-mean”中的变量“x”必须分配一个默认值。

我试图R-mean(x)像这样显式运行该函数:

#+call: R-mean(tbl-example-data)

不幸的是我得到:

在此缓冲区中未找到参考“R-mean”。

如何R-mean使用来自的值运行函数tbl-example-data

提前致谢。

杰尼亚


好的,我按照说明更改了代码:

#+NAME: tbl-example-data()
#+BEGIN_SRC R :results value  <-------------------- changed
runif(n=5, min=0, max=1)
#+END_SRC

#+RESULTS: tbl-example-data
|  0.565871287835762 |
|  0.457158328965306 |
| 0.0498181856237352 |
|  0.988381117349491 |
|  0.898329895688221 |



#+NAME: R-mean(x)
#+BEGIN_SRC R :var x=tbl-example-data <-------------- changed
mean(x)
#+END_SRC




#+call: R-mean(x=tbl-example-data)

它返回给我:

 Reference 'R-mean' not found in this buffer.

我不知道我做错了什么。

4

2 回答 2

0

您只需要进行一些小的更改即可完成这项工作。

  1. 添加:results value到您的第一个代码块的标题:

    #+NAME: tbl-example-data()
    #+BEGIN_SRC R :results value
    runif(n=5, min=0, max=1)
    #+END_SRC
    
    #+RESULTS: tbl-example-data
    ...
    
  2. 添加:var x=tbl-example-data到第二个代码块的标题:

    #+NAME: R-mean(x)
    #+BEGIN_SRC R :var x=tbl-example-data
    mean(x)
    #+END_SRC
    

有了这些更改,您为获得最终结果而描述的两种方式都将起作用。通过评估第二个代码块C-c C-c给出:

#+RESULTS: R-mean
: 0.49763968242332357

并通过调用该R-mean函数#+CALL: R-mean(tbl-example-data)产生:

#+RESULTS:
: 0.49763968242332357

来源

于 2014-08-12T15:23:29.197 回答
0

我知道这是一个非常古老的问题,但我想添加它以防它对其他人有用。itsjeyd 的回答也没有完全适合我,我相信这就是原因。

需要进行三项更改。

  1. 正如 itsjeyd 所指出的,您x的函数中需要一个默认值R-mean。你可以放:var x=tbl-example-data,但你也可以放:var x=0

  2. 您需要删除#+NAME: R-mean(x)#+NAME: R-mean.

  3. 当您通过x时,它被读取为单列数据框,而不是向量(至少对我而言)。因此,您可能需要更改mean(x)mean(x[, 1]).

对我来说,无论我是否使用:results value. 你的旅费可能会改变。

这对我有用。

#+NAME: tbl-example-data()
#+BEGIN_SRC R
runif(n=5, min=0, max=1)
#+END_SRC

#+RESULTS: tbl-example-data
| 0.926858797203749 |
| 0.830021075671539 |
| 0.788423302117735 |
| 0.794694420881569 |
| 0.943031084956601 |


#+NAME: R-mean
#+BEGIN_SRC R :var x=""
mean(x[, 1])
#+END_SRC


#+call: R-mean(x=tbl-example-data)

#+RESULTS:
: 0.856605736166239

最后一点。如果您在第一个块名称的末尾有括号,则#+NAME: tbl-example-data()该块似乎不会每次都重新评估。因此多次运行 call 语句会产生相同的结果。

但是,如果您删除括号,给出#+NAME: tbl-example-data,则每次运行 call 语句时都会评估该块,每次都会产生不同的结果。我不知道这个。

希望有帮助!

于 2020-01-13T15:56:31.150 回答