У меня проблема, и, проведя выходные, я хотел бы попросить о помощи. Чтобы объяснить эту проблему, я хотел бы перейти непосредственно в пример:R: Как использовать «данные» -аргумент lm-формулы как символ?
df <- data.frame(x=rnorm(100), z=rnorm(100), y=rnorm(100), f=rep(1:5,length.out=100))
mod <- lm(y ~ x, data=df[df$z>0,])
Я хочу перерабатывают данных-аргумент модели:
dat <- mod$call[['data']]
Это дает мне:
df[df$z > 0, ]
Однако str(dat)
покажет, что это объект типа language
. Однако я хочу использовать это выражение для доступа к фрейму данных, который использовался в lm
(включая подзадачу), чтобы получить соответствующие значения другой переменной, например f
. Обратите внимание, что преобразование объекта языка в символ с as.character()
приведет к символьному вектору, а некоторые из скобок будут потеряны.
Я хочу, чтобы использовать эту функцию внутри функции, и то, что я ищу что-то вроде этого:
foo <- function(fm, "var.name"){
new <- paste(dat, "$", var.name, sep="")
newvar <- eval(parse(text=new), envir=.GlobalEnv)
... do stuff with newvar ...
}
Без суб-настройки, эта процедура дает мне переменную f
если я указываю var.name
в f
. С подстановкой я столкнулся с проблемами с parse
из-за того, что dat
теперь является символьным вектором с скобками.
В качестве побочного примечание: причина, почему я хочу, чтобы переработать data
-argument от lm
-функции, а не только с использованием того же выражения с var.name
, что я изменить суб-настройки довольно часто, и с его признали от lm-объекта делает мою жизнь намного проще. Он также удаляет источник ошибки.
Я был бы весьма признателен, если кто-то может помочь мне здесь ...
вы смотрели на 'deparse()'? –
Как насчет 'mod $ model'? У него будут 'x' и' y', этого достаточно? – flodel
Бен, спасибо большое! Я фактически использую deparse в другой части моего кода. Ужас, что я об этом не думал. Большое спасибо! – coffeinjunky