gpt4 book ai didi

r - 如何评估 data.frame 中的调用?

转载 作者:行者123 更新时间:2023-12-02 03:37:21 25 4
gpt4 key购买 nike

在我正在处理的一个包中,我遇到了一个看起来很简单的问题 - 但我无法弄清楚:

子函数有两个参数:

  • obj ,一个data.frame
  • foo ,一个call

例如:

> head(obj)
cadmium copper lead zinc elev
1 11.7 85 299 1022 7.909
2 8.6 81 277 1141 6.983
3 6.5 68 199 640 7.800
4 2.6 81 116 257 7.655
5 2.8 48 117 269 7.480
6 3.0 61 137 281 7.791
> foo
log(cadmium)
> class(foo)
[1] "call"

在该示例中,我想创建一个向量 x <- log(obj$cadmium) 。我怎么做?我尝试使用 with()但我没有得到预期的结果:

> with(obj, foo)
log(cadmium)

foo是用户通过指定 data.frame 的列上的转换创建的调用 obj :

my_function(obj, foo = log(cadmium)) { ... }

dput()数据片段:

obj <- data.frame(
cadmium = c(11.7, 8.6, 6.5, 2.6, 2.8, 3),
copper = c(85L, 81L, 68L, 81L, 48L, 61L),
lead = c(299L, 277L, 199L, 116L, 117L, 137L),
zinc = c(1022L, 1141L, 640L, 257L, 269L, 281L),
elev = c(7.909, 6.983, 7.8, 7.655, 7.48, 7.791),
row.names = c("1", "2", "3", "4", "5", "6")
)

最佳答案

您需要评估调用,例如使用eval():

foo <- call("log", quote(cadmium))
with(obj, eval(foo))

给出:

> with(obj, eval(foo))
[1] 2.4595888 2.1517622 1.8718022 0.9555114 1.0296194 1.0986123

其中 obj 是您显示的数据片段。

eval() 还有一个 envir 参数,指示计算表达式的环境。因此,您可以直接使用 eval() 执行您想要的操作,而无需使用 with() :

> eval(foo, envir = obj)
[1] 2.4595888 2.1517622 1.8718022 0.9555114 1.0296194 1.0986123

关于r - 如何评估 data.frame 中的调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6513757/

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