최근에 다음 코드 줄을 작성 for(i in seq_len(exponent)){out<-squareMat%*%out}
했습니다.. 분명히, i
결코 사용되지 않았고 " exponent
times, do out<-squareMat%*%out
" 라고 말하고 싶었습니다 . 중복 카운터없이이 작업을 수행 할 수있는 방법이 i
있습니까? 예를 들어, apply
이것에 대한 가족 기능이 있습니까?
예-다음이 있습니다.
squareMat<-matrix(c(0,10,20,30),2,2)
out<-diag(nrow = nrow(squareMat))
exponent<-5
for(i in seq_len(exponent)){out<-squareMat%*%out}
out
내가 원하는 것은 :
squareMat<-matrix(c(0,10,20,30),2,2)
out<-diag(nrow = nrow(squareMat))
exponent<-5
[do exponent times]{out<-squareMat%*%out}
out
네, 그렇습니다. R
요즘 자주 사용되지 않는 몇 가지 유용한 기능이 base에 존재합니다 . 그들 중 하나는 당신이 원하는 것을 정확히합니다. 이 replicate
함수는 표현식 ( expr
)을 복제합니다 n
. 다음과 같이 작동합니다. 균일 한 (0 ~ 1) 분포에서 크기가 5 인 3 개의 다른 샘플을 생성한다고 가정 해 보겠습니다. 을 사용하여 쉽게 수행 할 수 있습니다 replicate
. 아래 코드를 살펴보십시오.
replicate(n = 3, expr = {runif(n = 5)})
# [,1] [,2] [,3]
# [1,] 0.1944426 0.5158065 0.39892501
# [2,] 0.5676580 0.9940599 0.97385575
# [3,] 0.5570141 0.2274214 0.60239883
# [4,] 0.5074303 0.3526040 0.95445298
# [5,] 0.1931812 0.4593620 0.03283596
결과는 array
(이 경우 매트릭스)로 자동 구성됩니다 . 그러나 매개 변수를 설정할 수 있습니다 simplify = FALSE
. 그런 다음 반환은 목록이 될 것입니다
replicate(n = 3, expr = {runif(n = 5)}, simplify = FALSE)
# [[1]]
# [1] 0.4694347 0.9559887 0.8110113 0.7528089 0.6639614
#
# [[2]]
# [1] 0.8731027 0.7295846 0.3773571 0.5394776 0.6792322
#
# [[3]]
# [1] 0.3463870 0.3776352 0.3895620 0.2166284 0.5065204
이러한 각 복제는 서로 독립적이라는 점에 유의해야합니다. 무언가를 순차적으로 복제하려면 for
루프 또는 다른 적절한 기능 을 사용해야합니다 . 예를 들어 rapply
(recursive lapply) 라는 함수가 있습니다 . 그러나 그것을 사용하는 가장 좋은 방법은 나에게 분명하지 않았습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다