gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 05:04:09 25 4
gpt4 key购买 nike

我觉得这是微不足道的,对于提出如此简单的问题我深表歉意,但对于以下问题,我将不胜感激:我有一个需要两个参数的函数:

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或等效的解决方案可以解决问题。我如何让它工作?

编辑:我玩得更远了一点,但它仍然没有用。这是我在受到一些评论的启发后认为应该起作用的方法:

  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 的字符串,但出现以下错误: Error in get(d2): object 'airquality$Temp' not found.我希望通过构造一个字符串,该字符串为我提供包括数据框在内的变量名称,我可以使用 get 访问它。 , 但有些东西仍然不起作用... :(

最佳答案

您想使用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.framename目的。如果您已经有了可以传递给函数的那条信息,那么使用起来会简单得多

 head( get(Name), 5)

请注意,head 为您提供了前五个,而不仅仅是前五个元素

关于string - 如何使用函数的参数作为变量名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16545689/

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