Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 从命名列表和函数名创建可解析的字符串_R - Fatal编程技术网

R 从命名列表和函数名创建可解析的字符串

R 从命名列表和函数名创建可解析的字符串,r,R,显然,我有一个简单的问题,我的灰质目前拒绝抓住——比如说我有一个清单: list(a = "foo", b = c("bar", "biz", "booze")) 和一个函数fn。如何获得这样的字符串: "fn(a = \"foo\", b = c(\"bar\", \"biz\", \"booze\"))" 附言 我知道我会后悔早上问这个问题…这应该让你开始,对吧 deparse(list(a = "foo", b = c("bar", "biz", "booze")),control =

显然,我有一个简单的问题,我的灰质目前拒绝抓住——比如说我有一个清单:

list(a = "foo", b = c("bar", "biz", "booze"))
和一个函数
fn
。如何获得这样的字符串:

"fn(a = \"foo\", b = c(\"bar\", \"biz\", \"booze\"))"
附言


我知道我会后悔早上问这个问题…

这应该让你开始,对吧

deparse(list(a = "foo", b = c("bar", "biz", "booze")),control = NULL)
[1] "list(a = \"foo\", b = c(\"bar\", \"biz\", \"booze\"))"
一个更完整的版本,我在@aL3xa评论时完成了这个版本

gsub("^list","fn",
    deparse(list(a = "foo", b = c("bar", "biz", "booze")),control = NULL))

您还可以直接操作语言对象,如R语言定义的第1部分所述:

X <- quote(list(a = "foo", b = c("bar", "biz", "booze")))
X[[1]] <- quote(fn)  ## as.symbol("fn") would also work
deparse(X)
# [1] "fn(a = \"foo\", b = c(\"bar\", \"biz\", \"booze\"))"

也许是一个从dput开始的解决方案?我不想听起来像是M-x医生,但是@BenBolker你能详细说明一下吗?我会给你一个复选标记,但我发誓这一刻我想到了:
deparse(list(a=“foo”,b=c(“bar”,“biz”,“booze”)),control=“useSource”)
,是的,
gsub
,瞧……在回复你的
gsub
编辑时,仅仅
gsub(“^list”,“fn”,“)
)不是更容易吗?@aL3xa是的。我不知道为什么我脑子里会想我需要这么做。我想我只是喜欢把事情复杂化。不,你只是不把正则表达式当作灵丹妙药,不像我。这很好。非治疗部分…=)如果只传递
“list”
,则有可能替换字符串中不需要的内容。该死,我得了雷格克斯强迫症!奥德曼,这是一个更好的成语。。。这就是我想要做的,改变
调用
对象本身,而不是应用丑陋的hack。抱歉@joran,这更优雅了@aL3xa没问题!对于胜利者来说,战利品……我会感到安慰的是,我最初的尝试是试图将horn
quote
鞋穿到东西上,所以很明显,我的潜意识在某种东西上。。。
ll <- list(a = "foo", b = c("bar", "biz", "booze"))
deparse(as.call(c(as.symbol("fn"), ll)))
# [1] "fn(a = \"foo\", b = c(\"bar\", \"biz\", \"booze\"))"