gpt4 book ai didi

r - 为什么 RMarkdown `render` 行为取决于它是从 RStudio Server 还是从 PHP shell 调用?

转载 作者:行者123 更新时间:2023-12-05 00:54:20 27 4
gpt4 key购买 nike

我有一个包含“特殊字符”的 RMarkdown 文档,例如 ë .如果我使用 RStudio Server 的“knit document”按钮渲染文档,它渲染得很好。当我使用 RStudio Server 按钮来渲染另一个调用 RMarkdown 的 R 脚本时的 render功能,它也呈现良好。

但是,由于某种超出我的原因(但希望不会持续太久),当 index.php 调用相同的 R 脚本时,我得到了不同的结果。使用:

$results = shell_exec("R --file='/home/username/public_html/some/subdirectories/process.R' --no-save 2>&1");

当我这样做时,在生成的 .html 文件中,特殊符号(我猜是 unicode 符号)被替换为 <U+00EB> .我试图查找这是否是我还不知道的 HTML 元素的某种变体,但我一直无法找到任何关于此的信息。

(注意:任何指向我可以了解更多相关信息的地方的链接(并且,当我们在此时,为什么我的浏览器不显示它,例如,它代表的 ë,也非常感谢!)

可重现的示例
example.php的内容:
<?php
shell_exec("R --file='/home/username/public_html/subdirectory/example.R' --no-save 2>&1");
?>
example.R的内容(这是我在服务器上需要的):
workingPath <- "/home/username/public_html/subdirectory";

### Set path to RStudio's pandoc version
Sys.setenv(PATH=paste(Sys.getenv("PATH"),
"/usr/lib/rstudio-server/bin/pandoc",
sep=":"));

### Set HOME and LANG
Sys.setenv(HOME = '/home/username');
Sys.setenv(LANG = 'en_US.UTF-8');

require(rmarkdown);

renderResults <-
render(file.path(workingPath, 'example.Rmd'),
output_file = file.path(workingPath, 'example.html'),
intermediates_dir = file.path(workingPath, 'tmp'),
encoding="UTF-8");
example.Rmd的内容:
---
title: 'Reproducable example'
output: html_document
---

```{r}
cat("This is an ë symbol.");
```

这个例子的结果:

当我从 R Studio 运行它时,我得到:

cat("This is an ë symbol.");

## This is an ë symbol.



当我从 PHP 运行它时,我得到:

cat("This is an ë symbol.");

## This is an <U+00EB> symbol.



(有趣的是,请注意 echo 'ed ë 确实正常显示...)

我现在求助于做一个 str_replaceindex.php文件,但这并不理想。

我检查了 render手册,但我找不到有关此行为的任何信息。

我还研究了为 pandoc 指定选项在 .Rmd 文件的 YAML header 中,但似乎唯一接近的是 --ascii option ,这没有任何作用。 R Studio RMarkdown page也不提供任何提示。

它可能与在 RStudio 中设置的环境变量有关吗?我已经不得不设置:
Sys.setenv(HOME = '/home/oupsyusr');
Sys.setenv(LANG = 'en_US.UTF-8');

在 R 脚本中,当在从 PHP shell 调用的 R 脚本中调用时,首先让 Pandoc 运行;但如果这是问题所在,我如何确定 RStudio 将哪些设置设置为哪些值,或者更准确地说,哪些设置很重要?我跑了:
Sys.getenv()

在 R Studio 中,这显示了相当多的列表。我认为没有一个条目与编码有关。

或者,knitr 会导致这个吗?当我存储和检查 .md 文件时,Unicode 元素已经显示出来了。然而, knitr help page with chunk options一般没有关于 unicode 或编码的任何内容。

有没有人知道这是记录在哪里,或者有没有人碰巧遇到过这种情况?

我在 CentOS 6.8 上运行 RStudio 0.99.903 和 R 3.3.1。

最佳答案

通常,这种形式的问题(其中 unicode 字符被转换为 unicode 代码点表示,例如 <U+00EB> 在这种情况下)是由尝试在非 UTF-8 语言环境中运行 R 引起的。

通常,这可以通过检查 Sys.getlocale("LC_ALL") 的输出来验证。 .如果您看到 C区域设置报告,那么您可能需要使用以下内容强制执行 UTF-8 区域设置:

Sys.setlocale("LC_ALL", "en_US.UTF-8")

根据您想要的语言替换特定的 UTF-8 语言环境风格。 (作为引用,可用的语言环境集通常可以从终端使用类似 locale -a 的内容进行查询)。

关于r - 为什么 RMarkdown `render` 行为取决于它是从 RStudio Server 还是从 PHP shell 调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40245888/

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