提问人:Robert Hadow 提问时间:1/13/2016 最后编辑:Rich ScrivenRobert Hadow 更新时间:8/7/2018 访问量:6709
as.name() 不能用作参数
as.name() doesn't work as an argument
问:
我构建了一个函数,其返回值根据其内容命名。Using 在控制台中有效,但不能作为函数参数。as.name()
x <- "newNameforIris"
assign(x, iris)
as.name(x)
# [1] newNameforIris
head(newNameforIris) # gives familiar results (not included)
save(as.name(x), file = "nnfi.bin")
# [1] Error in save(as.name(x), file = "nnfi.bin") : object ‘as.name(x)’ not found
我也试过了,但无济于事。在函数执行之前,我不知道对象的名称,所以我被困在没有或替代方案的情况下。eval.promises = FALSE
as.name()
答:
0赞
RJ-
1/13/2016
#1
这是因为 的类是 。as.name(x)
name
class(as.name(x))
# [1] "name"
尝试:
save(get(x), file = "nnfi.bin")
评论
1赞
Rich Scriven
1/13/2016
你为什么不这样做呢?save(list = x, ...)
0赞
RJ-
1/13/2016
抱歉,我之前的回答只会将 newNameforIris 保存到文件中。当前答案应保存正确的数据。如果仍然遇到错误,则可能需要跟踪对象所在的环境网络,并在 .get
0赞
Robert Hadow
4/5/2017
我尝试了结果:当 x 是字符名称而 df 是对象时,什么对我有用:我的观察:并且在 but 的左侧工作得不太好,工作正常。save(get(x), file = "nnfi.bin")
object get(x) not found
assign(x, iris)
save(list = x, file = "nnfi.bin")
get(x)
eval(parse(text = x))
<-
assign(x, iris)
exists(x)
2赞
IanRiley
8/7/2018
#2
我在被问到这个问题 2.5 年后发现了这个问题,因为没有令人满意的答案,所以我调查了这个问题。这是我的发现。
调查:
失败重现,但问题不仅仅是.as.name()
x <- "newNameforIris"
assign(x, iris)
as.name(x)
head(newNameforIris) # as expected
save(as.name(x), file = "nnfi.bin")
# Error in save(as.name(x), file = NULL) : object ‘as.name(x)’ not found
save(as.character(x), file = "nnfi.bin")
# Error in save(as.character(x), file = NULL) : object ‘as.character(x)’ not found
save(eval(as.name(x)), file = "nnfi.bin")
# Error in save(eval(as.name(x)), file = "nnfi.bin") : object ‘eval(as.name(x))’ not found
以下操作成功。
y <- as.name(x)
save(y, file = "nnfi.bin")
save("x", file = "nnfi.bin")
save(list=c("x"), file = "nnfi.bin")
save(list=c(as.character(as.name(x))), file = "nnfi.bin")
结论:
的参数只能接受符号和字符串,就像帮助文件所说的那样,“要保存的对象的名称(作为符号或字符串)”。...
save()
因此,让我们看看如何处理.只需输入,而不是。save()
...
save
save()
save
#....
# names <- as.character(substitute(list(...)))[-1L]
# list <- c(list, names)
#....
现在,让我们用上面的其他失败测试来测试它。as.name(x)
fx <- function(..., list = character()) {
names <- as.character(substitute(list(...)))[-1L]
list <- c(list, names)
return(list)
}
fx(as.name(x)) # [1] "as.name(x)"
fx(as.character(x)) # [1] "as.character(x)"
fx(eval(as.name(x))) # [1] "eval(as.name(x))"
答:
参数中的项不会被计算,而是转换为字符串,因此除非这些字符串与现有对象相同,否则函数调用将失败。...
save()
建议:
使用以下命令。
x <- as.name(x)
save(x, file = "nnfi.bin")
评论
save()
list