gpt4 book ai didi

r - 渲染rmarkdown时Rscript和Rs源输出的区别

转载 作者:行者123 更新时间:2023-12-01 09:47:49 25 4
gpt4 key购买 nike

我有一个将多个 .Rmd 文件合并到 .md 文件中的构建脚本,我从以下调用它的方式得到不同的结果:

R -e source('bin/build_script.R')

按预期工作,但是

Rscript bin/build_script.R

没有按预期工作。生成的 .md 文件之间的差异与具有 as(x, "Spatial") 行的代码块有关。第一种方法,x被转换,大家开心。使用 Rscript 调用会导致代码块返回错误

Error in as(x, "Spatial"): no method or default for coercing "sfc_POINT" to "Spatial"

Rscript 和 source 处理导入库的方式不同吗?

这是我的构建脚本:

require(knitr)
require(yaml)
require(stringr)

config = yaml.load_file('docs/_config.yml')
render_markdown(fence_char = '~')
opts_knit$set(
root.dir = '.',
base.dir = 'docs/',
base.url = '{{ site.baseurl }}/')
opts_chunk$set(
comment = NA,
fig.path = 'images/',
block_ial = c('{:.input}', '{:.output}'),
cache = FALSE,
cache.path = 'docs/_slides_Rmd/cache/')

current_chunk = knit_hooks$get('chunk')
chunk = function(x, options) {
x <- current_chunk(x, options)
if (!is.null(options$title)) {
# add title to kramdown block IAL
x <- gsub('~~~(\n*(!\\[.+)?$)',
paste0('~~~\n{:.text-document title="', options$title, '"}\\1'),
x)
# move figures to <div> on next slide
x <- gsub('(!\\[.+$)', '===\n\n\\1\n{:.captioned}', x)
} else {
# add default kramdown block IAL to kramdown block IAL to input
x <- gsub('~~~\n(\n+~~~)',
paste0('~~~\n', options$block_ial[1], '\\1'),
x)
if (str_count(x, '~~~') > 2) {
idx <- 2
} else {
idx <- 1
}
x <- gsub('~~~(\n*$)',
paste0('~~~\n', options$block_ial[idx], '\\1'),
x)
}
return(x)
}
knit_hooks$set(chunk = chunk)

files <- list.files('docs/_slides_Rmd')
for (f in config$slide_sorter) {
f.Rmd <- paste0(f, '.Rmd')
if (f.Rmd %in% files) {
f.md <- paste0(f, '.md')
knit(input = file.path('docs/_slides_Rmd', f.Rmd),
output = file.path('docs/_slides', f.md))
}
}

最佳答案

这是一个古老的“功能”,值得一个常见问题解答条目:Rscript,在其永恒的智慧中 加载 methods 包它是 Base R 附带的,是正确处理 S4 类所必需的。

只需在您的脚本中添加一行 library(methods) 就可以了。

或使用 littler而不是加载它的 Rscript :)

关于r - 渲染rmarkdown时Rscript和Rs源输出的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45017968/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com