String 如何使用函数的参数作为变量名?

String 如何使用函数的参数作为变量名?,string,r,function,variables,arguments,String,R,Function,Variables,Arguments,我觉得这很琐碎,很抱歉问了这么简单的问题,但我希望能在以下问题上得到一些帮助:我有一个需要两个参数的函数: myfun <- function(fm, name){ ... } 此函数的目的是显示数据框中用于拟合fm的变量name的前五个元素。但是,name未被识别为相应数据帧中的变量。用和(df,…),df$name或等效的解决方案包装它都不会起作用。我如何让它工作 编辑: 我已经玩了一点,但它仍然不工作。在我受到一些评论的启发后,我认为这是应该起作用的: myfun <

我觉得这很琐碎,很抱歉问了这么简单的问题,但我希望能在以下问题上得到一些帮助:我有一个需要两个参数的函数:

myfun <- function(fm, name){
  ... 
}
此函数的目的是显示数据框中用于拟合
fm
的变量
name
的前五个元素。但是,
name
未被识别为相应数据帧中的变量。用
和(df,…)
df$name
或等效的解决方案包装它都不会起作用。我如何让它工作

编辑: 我已经玩了一点,但它仍然不工作。在我受到一些评论的启发后,我认为这是应该起作用的:

  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)

myfun您想要使用
get
,但是不能保证data.frame会在那里

> head(get(as.character(fm$call$data)), 5)
  Ozone Solar.R Wind Temp Month Day
1    41     190  7.4   67     5   1
2    36     118  8.0   72     5   2
3    12     149 12.6   74     5   3
4    18     313 11.5   62     5   4
5    NA      NA 14.3   56     5   5
但是,
as.character(fm$call$data))
提供给您的只是
data.frame
对象的名称。 如果您已经有了可以传递给函数的那条信息,那么使用起来就会简单得多

 head( get(Name), 5)
注意,head给出的是前五行,而不仅仅是前五个元素

air <- data(airquality)
fm <- lm(Ozone ~ Solar.R, data=airquality)

myfun <- function(fm, name){
  dn <- fm$call[['data']]
  varname <- deparse(substitute(name))
  get(as.character(dn),envir=.GlobalEnv)[varname]
}

myfun(fm, Temp)

air我有点困惑,但你可能只想
[[/code>就像
dat[[name]]]
一样……但你可能也在寻找
get
。我特别困惑的是,为什么你需要
评估你的数据……这个问题肯定令人困惑,而且可以从一个强大的重新评估中获益-write@Justin:
str(fm$call$data)
显示这会产生一个“符号”作为输出,而
str(eval(fm$call$data)
显示了相关的数据框。坦率地说,我从这里的另一个问题的答案中复制了这一点。对于如何使其更加优雅,我将非常感谢您的任何建议。看起来您正在处理的数据就像是模型的输出,对吗?您可以单独访问其组件,而无需太多的
调用
技巧对数据进行加密使一切变得更加容易,只是为了使问题更加明显:我想从拟合模型中获取数据帧的原因是我经常使用不同的数据子集。子集必须在
lm()中指定
并且我希望在更改它时避免在我的函数中再次指定它。键入
lm(y~x,data=df[some lenghty condition]
和另外的
myfun(fm,df[some lenghty condition]$variablename)
看起来既单调又低效。想象一下,将您的数据子集更改50次。将其包含到我的函数中会真正帮助我节省时间。很好,您已经有了它。不过,您可能需要研究编程方法来完成任务;)谢谢!这很有帮助!我甚至没有想到本地和全球环境,只是试图将我的字符串强制转换为其他格式。但现在我想起来了,这确实是一个简单且非常明显的解决方案。感谢您指出这一点!
air <- data(airquality)
fm <- lm(Ozone ~ Solar.R, data=airquality)

myfun <- function(fm, name){
  dn <- fm$call[['data']]
  varname <- deparse(substitute(name))
  get(as.character(dn),envir=.GlobalEnv)[varname]
}

myfun(fm, Temp)