switch()
함수의 인수 값에 따라 다른 계산을 트리거하기 위해 R에서 내 함수를 사용하고 싶습니다 .
예를 들어 Matlab에서는 다음과 같이 작성할 수 있습니다.
switch(AA)
case '1'
...
case '2'
...
case '3'
...
end
나는이 post- switch () 문 사용법을 발견했습니다 . 사용 방법을 설명 switch
하지만 단순한 mean
.가 아닌 더 복잡한 계산 (행렬 연산)을 수행하고 싶기 때문에 실제로 도움이되지 않습니다 .
답변
글쎄, switch
아마도 이렇게 작동하도록 의도 된 것은 아니지만 다음과 같이 할 수 있습니다.
AA = 'foo'
switch(AA,
foo={
# case 'foo' here...
print('foo')
},
bar={
# case 'bar' here...
print('bar')
},
{
print('default')
}
)
… 각 케이스는 표현식입니다. 일반적으로 단순한 일이지만 여기에서는 원하는 코드를 입력 할 수 있도록 곱슬 블록을 사용합니다.
답변
그 다양한 전환 방법 …
# by index
switch(1, "one", "two")
## [1] "one"
# by index with complex expressions
switch(2, {"one"}, {"two"})
## [1] "two"
# by index with complex named expression
switch(1, foo={"one"}, bar={"two"})
## [1] "one"
# by name with complex named expression
switch("bar", foo={"one"}, bar={"two"})
## [1] "two"
답변
이 예제가 도움이되기를 바랍니다. 중괄호를 사용하여 스위처 체인저 녀석 안에 모든 것이 포함되어 있는지 확인합니다 (미안하지만 기술 용어는 모르지만 = 기호 앞에 오는 용어는 무슨 일이 일어나는지 변경합니다). 저는 switch를 좀 더 통제 된 if () {} else {}
문장 으로 생각 합니다.
스위치 기능이 동일 할 때마다 우리가 제공하는 명령이 변경됩니다.
do.this <- "T1"
switch(do.this,
T1={X <- t(mtcars)
colSums(mtcars)%*%X
},
T2={X <- colMeans(mtcars)
outer(X, X)
},
stop("Enter something that switches me!")
)
#########################################################
do.this <- "T2"
switch(do.this,
T1={X <- t(mtcars)
colSums(mtcars)%*%X
},
T2={X <- colMeans(mtcars)
outer(X, X)
},
stop("Enter something that switches me!")
)
########################################################
do.this <- "T3"
switch(do.this,
T1={X <- t(mtcars)
colSums(mtcars)%*%X
},
T2={X <- colMeans(mtcars)
outer(X, X)
},
stop("Enter something that switches me!")
)
다음은 함수 내부입니다.
FUN <- function(df, do.this){
switch(do.this,
T1={X <- t(df)
P <- colSums(df)%*%X
},
T2={X <- colMeans(df)
P <- outer(X, X)
},
stop("Enter something that switches me!")
)
return(P)
}
FUN(mtcars, "T1")
FUN(mtcars, "T2")
FUN(mtcars, "T3")
답변
이것은 R에서 누락 된 “Select cond1, stmt1, … else stmtelse”구성에 대한보다 일반적인 대답입니다. 약간 가스가 많지만 C에있는 switch 문과 유사하게 작동합니다.
while (TRUE) {
if (is.na(val)) {
val <- "NULL"
break
}
if (inherits(val, "POSIXct") || inherits(val, "POSIXt")) {
val <- paste0("#", format(val, "%Y-%m-%d %H:%M:%S"), "#")
break
}
if (inherits(val, "Date")) {
val <- paste0("#", format(val, "%Y-%m-%d"), "#")
break
}
if (is.numeric(val)) break
val <- paste0("'", gsub("'", "''", val), "'")
break
}