gpt4 book ai didi

r - 如何(重新)创建 'language' 类型的对象?

转载 作者:行者123 更新时间:2023-12-04 09:52:17 26 4
gpt4 key购买 nike

考虑以下问题:ff是一个公式,里面有一些花哨的东西;结果variables terms(ff) 的属性不会包含原始变量,而是包含花哨的东西,例如

ff <- ~I(Age)+poly(q,3)
str(attr(terms(ff),"variables"))
## language list(I(Age), poly(q, 3))

我正在尝试将此属性破解为 list(Age,q) 作为 language对象 .我可以中途到达那里:
(vlist <- lapply(as.list(all.vars(ff)),as.name))
## [[1]]
## Age
## [[2]]
## q
str(vlist)
## List of 2
## $ : symbol Age
## $ : symbol q

但我很难把它改回 language目的。我玩了很多 deparse , substitute , bquote , as.call ...但不能完全得到正确的咒语,例如
deparse(vlist)
## [1] "list(Age, q)" ## character, not language
parse(text=deparse(vlist))
## expression(list(Age, q)) ## expression, not language
as.name(vlist)
## Error in as.name(vlist) :
## (list) object cannot be coerced to type 'symbol'
dput(vlist)看起来不错,但它只是打印到控制台而不是更改对象...

更多背景信息:我在 model.matrix 内遇到下游问题,它检查的地方
reorder <- match(sapply(attr(t, "variables"), deparse2)[-1L], 
names(data))

(其中 deparse2deparse 的包装器,它将内容折叠为单个字符串)。我也许可以摆脱设置 variables归因于 NULL (所以没有什么会“不匹配”),但否则我必须将其设置为 deparse -able 并将匹配新数据框中的变量...

最佳答案

你在正确的轨道上 parsedeparse :

(lang <- parse(text=deparse(lapply(all.vars(ff), as.name)))[[1]])
# list(Age, q)
str(lang)
# language list(Age, q)

关于r - 如何(重新)创建 'language' 类型的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31008795/

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