我有一种感觉,这是微不足道的,我为问这样简单的问题道歉,但我希望得到一些帮助,下面的问题:我有一个需要两个参数的函数:如何使用函数的参数作为变量的名称?
myfun <- function(fm, name){
...
}
数据帧使用我可以通过dat <- eval(fm$call$data)
获得该功能。在dat
内部,有一个名称与第二个参数完全相同的变量,即有一个变量dat$name
(请注意函数的第二个参数不包括对数据帧的引用,即名称不等于dat$name
,而只是name
)我想用这个变量。
问:我该怎么做?
具体的例子:以下作为一个例子:
air <- data(airquality)
fm <- lm(Ozone ~ Solar.R, data=airquality)
myfun <- function(fm, name){
df <- eval(fm$call$data)
name[1:5]
}
myfun(fm, Temp)
此功能的目的是显示在数据帧的可变name
的第一五行已用于拟合fm
。但是,name
未被识别为相应数据帧中的变量。无论是用with(df, ...)
,df$name
还是同等的解决方案来包装它都没关系。我如何使它起作用?
编辑: 我已经玩得更进一步,但它仍然无法正常工作。这就是我想我是有些意见的启发后,应该工作:即通过构建一个字符串 Error in get(d2): object 'airquality$Temp' not found.
我希望:
myfun <- function(fm, name){
df <- as.character(fm$call$data)
varname <- deparse(substitute(name))
d1 <- paste(df, "$", sep="")
d2 <- paste(d1, varname, sep="")
get(d2)[1:5]
}
myfun(fm, Temp)
这会产生所谓的airquality$Temp
的字符串,但我得到以下错误这给我的变量的名称,包括我可以访问它使用get
,但仍然不能工作的数据帧的名称... :(
我有点困惑,但你可能只是想'[['在'DAT [名]'...但你也可能正在寻找'get'。我特别困惑你为什么需要'评估'你的数据...... – Justin 2013-05-14 14:28:21
这个问题当然令人困惑,并且可能受益于强大的重写 – 2013-05-14 14:35:54
@Justin:'str(fm $ call $ data)'显示这会产生一个“符号”作为输出,而'str(eval(fm $ call $ data)'显示相关的数据帧。坦率地说,我从这里回答了另一个问题。我将不胜感激任何有关如何使这更优雅的建议。 – coffeinjunky 2013-05-14 14:50:21