R中的switch语句帮助
Posted
技术标签:
【中文标题】R中的switch语句帮助【英文标题】:switch statement help in R 【发布时间】:2015-03-20 21:58:56 【问题描述】:我在 R 中有以下代码:
func.time <- function(n)
times <- c()
for(i in 1:n)
r <- 1 #x is the room the mouse is in
X <- 0 #time, starting at 0
while(r != 5)
if(r == 1)
r <- sample(c(2,3),1)
else if(r == 2)
r <- sample(c(1,3), 1)
else if(r == 3)
r <- sample(c(1,2,4,5), 1)
else if (r == 4)
r <- sample(c(3,5), 1)
X <- X + 1
times <- c(X, times)
mean(times)
func.time(10000)
它工作正常,但有人告诉我使用 switch() 可以加快速度,因为我有很多 if else 语句,但我似乎无法让它工作,任何帮助表示赞赏前进。
编辑 我试过这个:
func.time <- function(n)
times <- c()
for(i in 1:n)
r <- 1 #x is the room the mouse is in
X <- 0 #time, starting at 0
while(r != 5)
switch(r, "1" = sample(c(2,3), 1),
"2" = sample(c(1,3), 1),
"3" = sample(c(1,2,4,5), 1),
"4" = sample(c(3,5)))
X <- X + 1
times <- c(X, times)
mean(times)
func.time(10000)
但这是一个基本的尝试,我不确定我是否正确理解了 switch() 方法。
【问题讨论】:
我推荐你阅读this或this或this 而且,不仅仅是“我似乎无法让它工作”,如果你展示你尝试过的东西,它会有所帮助。然后,我们可以解释您没有得到的部分并纠正误解,而不是解释整个事情。 嗨,我试过这个: func.time 我已将您的最后一条评论放在您的帖子中以简化“调试”;首先请注意,您需要引用数字才能将它们作为参数接受;您还需要用逗号分隔它们中的每一个;然后,while 循环是一个无限循环,因为您增加了 X 但 r 一直保持为 1。最后,您希望将 switch 语句的结果分配给一个变量,否则它不会起到任何作用。 所以现在我们有路过的审稿人拒绝有用的编辑。啊。 【参考方案1】:我虽然多米尼克的评估非常有用,但是当我去检查编辑时,它被搁置在我认为不正确的基础上。所以我决定只修复代码。当对 EXPR 参数使用数字参数时,您不使用 item=value 形式,而只是放入表达式:
func.time <- function(n)times <- c()
for(i in 1:n); r <- 1; X <- 0
while(r != 5)
r <- switch(r,
sample(c(2,3), 1) , # r=1
sample(c(1,3), 1) , # r=2
sample(c(1,2,4,5), 1), #r=3
sample(c(3,5), 1) ) # r=4
X <- X + 1
times <- c(X, times)
mean(times)
func.time(1000)
#[1] 7.999
有关如何将switch
与 EXPR 的数字参数一起使用的另一个示例,请考虑我对这个问题的回答:R switch statement with varying outputs throwing error
【讨论】:
呵呵,我就像一个被树枝夹住的探险家,想要解开。但没有看到森林。现在我看到了;)以上是关于R中的switch语句帮助的主要内容,如果未能解决你的问题,请参考以下文章