R은 중복 변수로 for 루프를 작성하지 않고도 "n 번 수행"이라고 말할 수있는 방법이 있습니까?

J. Mini

최근에 다음 코드 줄을 작성 for(i in seq_len(exponent)){out<-squareMat%*%out}했습니다.. 분명히, i결코 사용되지 않았고 " exponenttimes, 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
LCgodoy

네, 그렇습니다. 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] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관