首页 > 解决方案 > 将绘图添加到文档在函数内部不起作用

问题描述

不知道问题的原因在这里......

代码在我内联函数时有效,但在我调用函数时无效......

作品:

library(officer)
data <- data.frame(test=c(1:10),test2=rep(c("a","b"),5))

doc <- read_docx()

# Inlined function
tabledata <- data$test2
d <- table(tabledata)
doc <-body_add_plot(doc, value = plot_instr(code = {barplot(d)}))


print(doc,target="test.docx")

不起作用:

library(officer)
data <- data.frame(test=c(1:10),test2=rep(c("a","b"),5))

doc <- read_docx()

createBarPlot <- function(){

    tabledata <- data$test2

    d <- table(tabledata)

    doc <-body_add_plot(doc, value = plot_instr(code = {barplot(d)}))
 
}

createBarPlot()

print(doc,target="test.docx")

错误信息:

Error in barplot(d) : object 'd' not found
Calls: createBarPlot ... tryCatch -> tryCatchList -> eval -> eval -> barplot
Backtrace:
    █
 1. └─global::createBarPlot()
 2.   └─officer::body_add_plot(...)
 3.     ├─base::tryCatch(...)
 4.     │ └─base:::tryCatchList(expr, classes, parentenv, handlers)
 5.     ├─base::eval(value$code)
 6.     │ └─base::eval(value$code)
 7.     └─graphics::barplot(d)
Execution halted

知道为什么将这段代码放在函数中会导致它失败吗?

编辑:所以在@Lmc 在评论中的建议之后,我更改了我分配d给的行d <<- table(tabledata)- 它起作用了!这对我来说有点意义,因为 doc (它是一个全局的)被修改但无权访问d. 但是,如果有人可以/想要更详细地解释,我很乐意学习!

标签: rofficer

解决方案


推荐阅读