gpt4 book ai didi

r - 获取 R 函数返回的变量名

转载 作者:行者123 更新时间:2023-12-04 10:56:49 25 4
gpt4 key购买 nike

我有这个代码:

library(magrittr)
a <- function(cars) return(cars)
b <- function(x) return(list(varname = deparse(substitute(x)), content = x))

b(cars) 返回一个列表,其中包含字符串 cars 和 data.frame cars 的内容。

任何让 a(cars) %>% b() 返回字符串 cars 的方法(函数 返回的变量名a()) 和 data.frame 的内容?

相反,它返回 . 和 data.frame 的内容。

也就是说,我希望第二个函数返回第一个函数返回的变量的名称以及变量的内容。

我实际上想用 b() 做的是 write.csv(x, paste0(deparse(substitute(x)), ".csv")).

有什么建议吗?

最佳答案

如果您查看 %>% 运算符中的调用堆栈,您会得到类似这样的结果

a(cars) %>% (function(x) sys.calls())

# [[1]]
# a(cars) %>% (function(x) sys.calls())
# [[2]]
# withVisible(eval(quote(`_fseq`(`_lhs`)), env, env))
# [[3]]
# eval(quote(`_fseq`(`_lhs`)), env, env)
# [[4]]
# eval(expr, envir, enclos)
# [[5]]
# `_fseq`(`_lhs`)
# [[6]]
# freduce(value, `_function_list`)
# [[7]]
# withVisible(function_list[[k]](value))
# [[8]]
# function_list[[k]](value)
# [[9]]
# (function (x) sys.calls())(.)

您可以看到当您的函数最终被调用时,您与原始表达式相距相当多的级别。问题是参数可能已在链中重新分配。考虑这种情况

a <- 6
b <- a
f <- function(x) deparse(substitute(x))
f(b)
# [1] "b"

但 R 无法知道 b 实际上来自 a。没有办法通过这样的任务向后走。 substitute 只有在您仍然可以访问传递给函数的 promise 时才会那样工作。

所以问题是当您的函数在链中被调用时,它已被重新分配给 这就是您无法再访问原始“名称”的原因。

关于r - 获取 R 函数返回的变量名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28735030/

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