【问题标题】:R: how to turn strings to arguments in order to be able to call a function?R:如何将字符串转换为参数以便能够调用函数?
【发布时间】:2013-12-16 18:18:21
【问题描述】:

我需要将字符串转换为参数才能调用函数。 这是我的数据:

myfunction <- function(arg1=c('val1', 'val2'), arg2=c('val1', 'val2'){
  ...
}

用户将只提供一个字符串形式的参数(arg1 或 arg2)。此参数的值也是如此。 例如,他可以输入 'arg1' 和字符串形式的值。程序将获取这些字符串并必须将它们提供给函数 myfunction(见下文)。

argument <- 'arg1'
values <- 'val1, val2, val3, val4, val5'

我试过了:

myfunction(as.name(argument)=list(parse(text=values))) 

但它不起作用。

知道如何让它工作吗?

谢谢

编辑

正如 Ananda Mahto 所问,参数名称及其值来自一个 Web 应用程序(使用闪亮)作为输入字段。 至于我正在使用的功能,它不是我的。所以我无法修改它接受参数的方式。但是,一般来说,它使用这些参数和值来生成图。

【问题讨论】:

  • 你能分享你的最终目标吗?我不太了解您要做什么,输入的示例是什么,等等....
  • 我想你可能只需要 ... 参数。
  • 我仍然不清楚您要做什么,但似乎您应该为 myfunction 编写一个包装函数。

标签: r shiny


【解决方案1】:

这是一种分配环境的方法,可以将其转换为具有正确属性的列表以使用do.call(并获取myfunction 以打印其参数):

tmp <- new.env()
assign(argument,unlist(strsplit(values,", ")),envir=tmp)
as.list(tmp)
$arg1
[1] "val1"  "val2" "val3" "val4" "val5"

do.call(myfunction,as.list(tmp))
[1] "val1" "val2" "val3" "val4" "val5"
[1] "val1" "val2"

【讨论】:

  • 嗯——你不能避免创造一个环境吗? foo &lt;- (strsplit(values,", ")) funcfoo&lt;-function(x) print(x) 然后do.call(funcfoo,foo) 似乎以相同的方式工作。我错过了什么吗?
  • 如果您想按名称匹配变量,您需要将命名列表传递给do.call。使用环境是创建它的一种方式,但可能还有其他方式。
  • 感谢詹姆斯的解决方案!它适用于我的情况:-)
猜你喜欢
  • 2019-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多