두 개의 인수가있는 함수가 있습니다. 첫 번째 인수는 벡터를 사용하고 두 번째 인수는 스칼라를 사용합니다. 이 함수를 행렬의 각 행에 적용하려고하지만이 함수는 매번 다른 두 번째 인수를 사용합니다. 나는 다음을 시도했다, 그것은 작동하지 않았다. 각 행에 대해 p.value를 계산 한 다음 p.value를 행 번호로 나눌 것을 예상했습니다. 그 결과가 벡터가 될 것으로 예상했지만 대신 행렬을 얻었습니다. 이것은 의사적인 예이지만 내 목적을 설명합니다.R- 행렬의 각 행에 함수를 변경 인수를 사용하여 적용 하시겠습니까?
> foo = matrix(rnorm(100),ncol=20)
> f = function (x,y) t.test(x[1:10],x[11:20])$p.value/y
> goo = 1:5
> apply(foo,1,f,y=goo)
[,1] [,2] [,3] [,4] [,5]
[1,] 0.9406881 0.6134117 0.5484542 0.11299535 0.20420786
[2,] 0.4703440 0.3067059 0.2742271 0.05649767 0.10210393
[3,] 0.3135627 0.2044706 0.1828181 0.03766512 0.06806929
[4,] 0.2351720 0.1533529 0.1371135 0.02824884 0.05105196
[5,] 0.1881376 0.1226823 0.1096908 0.02259907 0.04084157
다음 for 루프 전략은 예상 결과를 산출합니다. 실제 데이터에 대한 기대치는 매우 느립니다.
> res = numeric(5)
> for (i in 1:5){
res[i]=f(foo[i,],i)
}
> res
[1] 0.94068810 0.30670585 0.18281807 0.02824884 0.04084157
의견을 보내주십시오. 당신의 진짜 목적은 당신의 예와 같은 경우,이 부문 벡터화 할 수
'mapply' 기반 솔루션이있을 수 있습니다. –
예 : –
"mapply (f, split (foo, row (foo)), goo)"가 작동해야한다고 생각합니다. 왜 그것이 비효율적이라고합니까? 감사합니다 –