我在找get()
的反面。
给定一个对象名称,我希望直接从对象中提取表示该对象的字符串。
一个简单的例子,foo
是我正在寻找的函数的占位符。
z <- data.frame(x=1:10, y=1:10)
test <- function(a){
mean.x <- mean(a$x)
print(foo(a))
return(mean.x)}
test(z)
将打印:
"z"
我的工作,这是很难实现在我目前的问题是:
test <- function(a="z"){
mean.x <- mean(get(a)$x)
print(a)
return(mean.x)}
test("z")
4条答案
按热度按时间rqcrx0a61#
古老的替代方法:
编辑:使用新的测试对象运行它
注意:当一组列表项从第一个参数传递到
lapply
时,这在本地函数中不会成功(当一个对象从给定的列表传递到for
-循环时也会失败)。如果它是一个正在处理的命名向量,您可以从结构结果中提取“.Names”属性和处理顺序。w8f9ii692#
我的直观理解是,引号冻结了求值中的var或表达式,而parse函数是parse函数的反函数,它使冻结的符号返回到String
一些新的评论
替换和引用的区别:
和
第二个函数将始终返回x(
quote
函数作为参数获取的值),而第一个函数将返回传递给该函数的对象,尝试以下操作:uelo1irk3#
请注意,对于print方法,行为可以不同。
我在论坛上看到的其他评论表明,最后一种行为是不可避免的。如果你正在为包编写打印方法,这是不幸的。
kwvwclae4#
以下是Eli Holmes的回答:
myfunc
工作得很好1.我很想在另一个函数中调用它(在他8月15日,20日的评论中讨论过)
1.失败
1.在函数中,直接编码(而不是从外部函数调用),
deparse(substitute()
技巧工作得很好。1.这一切都隐含在他的回答中,但为了我这种健忘程度的偷窥者的利益,我想把它拼出来。