하기에 깔끔한 솔루션 무엇 네가 묻고있는 것 같아. 아래 코드
결과 out1
- (이 예에서는 mat
2 칼럼 10 개 행을 갖고, 행 abc10을 통해 ABC1 명명 된 I는 명확성을 위해 입력 행렬 mat
보다는 k
라고했다.) 계산하려는 결과 (적용 명령의 결과)입니다. 결과 out2
은 작업중인 rownames를 출력한다는 점을 제외하면 out1
과 동일하게 나옵니다 (행당 0.3 초의 지연 시간을 가짐으로써 실제로이 작업을 수행 할 수 있음을 알 수 있습니다. 분명히 전속력으로 달린다!)
내가 생각해 낸 트릭은 mat
의 왼쪽에 행 번호 (1에서 n까지)를 바인드하여 (하나의 추가 열이있는 행렬을 생성하기 위해) 이것을 참조하기 위해 사용한다. mat
의 rownames에. x = y[-1]
행에 유의하십시오. 즉, 함수 내의 실제 계산 (여기에 1을 더함)은 행 번호의 첫 번째 열을 무시합니다. 이는 out1
에 대해 수행 된 계산과 동일 함을 의미합니다.행에 대해 수행하려는 계산의 종류가 이와 같이 수행 될 수 있습니다. y
이 존재하지 않았다고 가정하고 x
을 사용하여 원하는 계산을 공식화하십시오. 희망이 도움이됩니다.
set.seed(1234)
mat = as.matrix(data.frame(x = rpois(10,4), y = rpois(10,4)))
rownames(mat) = paste("abc", 1:nrow(mat), sep="")
out1 = apply(mat,1,function(x) {x+1})
out2 = apply(cbind(seq_len(nrow(mat)),mat),1,
function(y) {
x = y[-1]
cat("Doing row:",rownames(mat)[y[1]],"\n")
Sys.sleep(0.3)
x+1
}
)
identical(out1,out2)
예상 답변을 명확히 할 수 있습니까? 'k'의 첫 번째 인스턴스에서 모든 숫자에 1을 더하면,'k'의 두 번째 인스턴스에서 응답을 얻지 못합니다. – ChrisW
그냥 for 루프를 사용하십시오. – joran
여기에는 정말 지저분한 제안이 많이 있습니다. 제안 된 솔루션이 귀하가 원하는 것을 수행하는지 알려주실 수 있습니까? –