gpt4 book ai didi

r - 在 switch 命令中使用可能值的列表

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

是否可以为我的 switch 提供一种可能值的列表?功能。如果有人提供了错误的参数,我很乐意让所有内容自动更新。

我使用 {}对于每个条件,因为我将在我的函数中执行更多的变量声明,所以我将在这个开关中做几件事。

switch(con,
val1={
filename <- 'SILAC-DML_with_PDF.R'
},
val2={
filename <- 'SILAC-DML_with_PDF.R'
},
stop(sprintf('"%s" is an unknown condition type, please use one of "%s".\n',
con, paste(c('val1','val2'), collapse=', '))))

我希望有一个类似列表的东西,我可以在其中粘贴名称以获取可能的值。所以理想的解决方案有点像这样,但没有错误消息:-)
my_list <- list(val1=filename <- 'a.R',
val2=filename <- 'b.R')
switch(con,
my_list,
stop(sprintf('"%s" is an unknown condition type, please use one of "%s".\n',
con, names(my_list), collapse=', '))))

最佳答案

switch函数是多余的,您可以简单地直接对值列表进行子集:

alternatives = list(val1 = 'SILAC-DML_with_PDF.R',
val2 = 'SILAC-DML_with_PDF.R')
result = alternatives[[con]]
if (is.null(result))
stop(…)

switch在 R 中是一个奇怪的野兽。我从来没有真正发现它有用。

如果您需要执行更复杂的操作,请考虑使用函数列表:
alternatives = list(
val1 = function () { message('foo') },
val2 = function () { message('bar') }
)

if (! con %in% names(alternatives))
stop(…)
result = alternatives[[con]]()

我不认为这可以通过 switch 巧妙地实现但它当然可以被包装成它自己的小函数。请注意,与 Hadley 的回答不同,以上所有内容都避免了部分参数名称匹配,这是一个巨大的错误来源,属于地球表面的驱逐。

关于r - 在 switch 命令中使用可能值的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31538340/

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