【问题标题】:Why does deparse return a vector of length two here?为什么 deparse 在这里返回一个长度为 2 的向量?
【发布时间】:2023-03-12 07:12:01
【问题描述】:

我需要在 R 中使用 deparse(...) 进行解析,在所有情况下都返回长度为 1 的向量。但是对于以下内容,我得到一个长度为 2 的向量:

> deparse(factor(All_cause_death, levels= c('Dead', 'Alive')) ~ Age_in_years + Systolic_Blood_pressure, backtick= TRUE)

[1] "factor(All_cause_death, levels = c(\"Dead\", \"Alive\")) ~ Age_in_years + "
[2] "    Systolic_Blood_pressure" 

如果我稍微缩短第一个变量名,我确实会得到长度为 1 的预期输出:

> deparse(factor(Death, levels= c('Dead', 'Alive')) ~ Age_in_years + Systolic_Blood_pressure, backtick= TRUE)
[1] "factor(Death, levels = c(\"Dead\", \"Alive\")) ~ Age_in_years + Systolic_Blood_pressure"

在上面的代码中,我通过将“All_cause_death”更改为“Death”将输入缩短了 10 个元素。有趣的是,如果我在输入末尾将输入缩短 10 个元素(或更多),我不会得到长度为 1 的向量:

> deparse(factor(All_cause_death, levels= c('Dead', 'Alive')) ~ Age_in_years + Systolic_, backtick= TRUE)
[1] "factor(All_cause_death, levels = c(\"Dead\", \"Alive\")) ~ Age_in_years + "
[2] "    Systolic_"

为什么会发生这种情况?如何才能为第一个代码获得长度为 1 的向量?

【问题讨论】:

  • 你可以很容易地通过将deparse 与 paste 包装起来得到一个长度为 1 的向量:paste(deparse([statement to be deparsed]), collapse = " ")
  • @AllanCameron 谢谢,这就是我现在正在做的事情,但我仍然想知道为什么会发生这种情况。
  • 您也可以在deparse() 函数中使用width.cutoff 参数。

标签: r parsing


【解决方案1】:

deparse 将在超过 60 个字符时换行。它具有width.cutoff 参数,如果您不希望发生这种情况,可以将其设置为更长的长度:

deparse(factor(All_cause_death, levels= c('Dead', 'Alive')) ~ Age_in_years+ Systolic_Blood_pressure, backtick= TRUE, width.cutoff = 200)
#> [1] "factor(All_cause_death, levels = c(\"Dead\", \"Alive\")) ~ Age_in_years + Systolic_Blood_pressure"

来自deparse 文档:

width.cutoff [20, 500] 中的整数确定尝试换行的截止时间(以字节为单位)。

您也可以使用deparse1 代替deparse,这实际上只是将最大width.cutoff 默认设置为500

deparse1(factor(All_cause_death, levels= c('Dead', 'Alive')) ~ Age_in_years+ Systolic_Blood_pressure, backtick= TRUE)
#> [1] "factor(All_cause_death, levels = c(\"Dead\", \"Alive\")) ~ Age_in_years + Systolic_Blood_pressure"

来自deparse1 的文档:

deparse1() 是 R 4.0.0 中添加的一个简单实用程序,用于确保字符串结果(长度为 1 的字符向量),通常用于名称构造,如 deparse1(substitute(.))。

【讨论】:

    猜你喜欢
    • 2012-05-23
    • 2014-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-20
    • 2015-02-17
    相关资源
    最近更新 更多