【问题标题】:R: mute output of Sys.setlocale()R: Sys.setlocale() 的静音输出
【发布时间】:2022-01-17 15:03:03
【问题描述】:

我运行一个脚本Rscript script.R > logfile.of.script.txt

在我设置的脚本中

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

返回

[1] "LC_CTYPE=en_US.UTF-8;LC_NUMERIC=C;LC_TIME=en_US.UTF-8;LC_COLLATE=en_US.UTF-8;LC_MONETARY=en_US.UTF-8;LC_MESSAGES=en_US.UTF-8;LC_PAPER=en_US.UTF-8;LC_NAME=C;LC_ADDRESS=C;LC_TELEPHONE=C;LC_MEASUREMENT=en_US.UTF-8;LC_IDENTIFICATION=C"

但是,此文本保留在我不想拥有的日志文件中。我怎样才能让Sys.setlocale("LC_ALL", "en_US.UTF-8") 安静地运行而没有任何输出到日志文件。 Sys.setlocale() 没有看到,有一个安静的开关来抑制输出。

【问题讨论】:

    标签: r logging output mute


    【解决方案1】:

    分配它或包裹在invisible(.)

    Sys.setlocale("LC_TIME", "English_United States.1252")
    # [1] "English_United States.1252"
    invisible(Sys.setlocale("LC_TIME", "English_United States.1252"))
    ign <- Sys.setlocale("LC_TIME", "English_United States.1252")
    

    虽然此函数确实有副作用,但它也会返回新值。由于它正在执行部分匹配以找到最佳值,因此返回值并不总是与提供的参数相同。例如,

    Sys.setlocale("LC_TIME", "English")
    # [1] "English_United States.1252"
    

    显示我想要什么和我得到什么......所以最偏执的方法可能是确保你得到你所要求的(以防部分匹配过于急切)。我从来没有遇到过需要这种程度的偏执狂的情况,但我很幸运,我所有的工作都使用一种语言(我的主要语言),没有多语言用户。

    【讨论】:

    • 非常感谢。但是我不明白什么时候会出错。是否可以提供一个 invisible 可能出错的示例?
    • 我对基于语言环境的差异工作不够了解何时会出错。我的防御性程序员看到我请求了一个语言环境 ("English") 但实际上分配了另一个语言环境 ("English_United States.1252"),这对我来说暗示了两件事:(1) 不必知道任何关于语言环境代码的便利-页(1252); (2) 也许我知道我想要什么,而 R(或底层操作系统库)不理解那个,所以它选择了下一个最合适的,这可能还不够好。我不知道可能有问题,我只是发现了未经宣传的行为。
    • Plus ?Sys.setlocale 看似矛盾('"LC_TIME"' 可能会影响 'as.POSIXlt' 和 'strptime' 的行为以及使用它们的函数(但不会影响 'date'. )",这与我上面演示的不一致),并且可能是特定于操作系统的(对于 Windows,Microsoft 经常移动其文档,因此网络搜索是查找当前信息的最佳方式 i>)。但我没有看到任何地方提到“部分匹配”。
    • 底线:我在语言环境中的工作还不够,无法举一个具体的例子来说明部分匹配何时会实际出现损坏的情况。我要说的是Sys.setlocale 的记录不足和不一致的行为(来自其文档)在我的脑海中引发了一些小警报。使用invisible(Sys.setlocale(..)) 并继续前进可能足够安全。
    猜你喜欢
    • 2016-04-20
    • 1970-01-01
    • 2015-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-10
    相关资源
    最近更新 更多