2014-11-20 2 views
0

벡터 k를 받아 길이 (distMat [1,]) 길이의 행렬을 나에게 반환하는 함수를 만들려고합니다. 케이). distMat는 거대한 행렬이고 indSpam은 긴 벡터입니다. 특히 내 상황에 따라 길이 (distMat [1,])는 2412입니다. 길이 1의 벡터로 k를 입력하면 길이가 2412 인 벡터가 생깁니다. k의 벡터로 입력 할 수 있기를 원합니다. 길이가 2이고 2412x2의 행렬을 얻습니다. 나는 k의 길이를 지나는 while 루프를 사용하려하지만 길이 2412의 벡터 만 반환합니다. 내가 뭘 잘못하고 있니?벡터를 가져 와서 행렬을 반환하는 함수를 만듭니다.

predNeighbor = function(k, distMat, indSpam){ 
    counter = 1 
    while (counter<(length(k)+1)) 
    { 
preMatrix = apply(distMat, 1, order) 
orderedMatrix = t(preMatrix) 
truncate = orderedMatrix[,1:k[counter]] 
checking = indSpam[truncate] 
checking2 = matrix(checking, ncol = k[counter]) 
number = apply(checking2, 1, sum) 


return(number[1:length(distMat[1,])] > (k[counter]/2)) 
counter = counter + 1 
    } 
} 
+0

일부 벡터를 함께 바인딩하는 데 cbind를 사용할 수 있다고 생각하지만 어떻게 벡터를 만들고 저장 한 다음 cbind에 넣을 수 있습니까? – swordyfish

+0

매트릭스의 항목은 무엇입니까? 귀하의 질문은 모두 차원에 관한 것입니다. 당신이 돌아 오는 행렬이 올바른 모양이지만 0으로 채워지는지 신경 쓰시겠습니까? 'indSpam'의 관련성은 무엇입니까? 'while' 루프는 반드시 필요한 것은 아닙니다. – Gregor

답변

0

I는 (K)

를 벡터 k를 받아 길이가 기준 길이 (distMat [1])과 저 매트릭스를 반환하는 함수를 생성하기 위해 애 쓰고 다음은이를 수행하는 함수입니다.

foo <- function(k, distMat) { 
    return(matrix(0, nrow = length(distMat[1, ]), ncol = length(k))) 
} 

다른 요구 사항이있는 경우 단어로 설명하십시오.

귀하의 의견에 따르면, 나는 당신의 목표를 더 잘 이해하고 있다고 생각합니다. 너는 길이가 k 인 벡터를 반환하는 함수를 가지고 있고 그것의 출력을 행렬로 행렬에 저장하고 싶습니다. 이것은 매우 일반적인 작업입니다. k1:10으로 시작하는 간단한 예제를 살펴보고 함수에 foo()이라는 노이즈를 추가하고 순위가 어떻게 변경되는지 살펴 보겠습니다.

함수 입력이 항상 동일한 경우 replicate()이 매우 잘 작동합니다. 그것은 자동으로 으로 반복하려는 경우 매트릭스

k <- 1:10 
noise_and_rank <- function(k) { 
    rank(k + runif(length(k), min = -2, max = 2)) 
} 

results <- replicate(n = 8, expr = {noise_and_rank(k)}) 

모든 것을 넣어 것, 즉, 한 가지의 출력은 다음의 입력이하는 for 루프가 좋은, 그리고 우리 단지 원래 질문은 사전 할당을 수행하는 방법이다 것으로 보인다 어떤 시간

k <- 1:10 
n.sim <- 8 
results <- matrix(0, nrow = length(k), ncol = n.sim) 
results[, 1] <- k 
for(i in 2:n.sim) { 
    results[, i] <- noise_and_rank(results[, i - 1]) 
} 

에 하나의 열/행을 채우기 위해, 공의와 매트릭스를 미리 할당합니다. 입력이 항상 동일하면 replicate()을 사용하면 걱정할 필요가 없습니다. 입력이 매번 다를 경우 matrix()을 사용하여 사전 할당하면 특별한 기능을 쓸 필요가 없습니다.

+0

내가 명확하지 않으면 미안 해요! 나는 함수에 k를 입력하고 그것에 대해 무언가를 할 것이고 다르게 나타날 것이다. 출력 벡터를 저장하고 벡터의 각 요소를 통해 함수를 실행하고 각 출력 벡터를 저장하고 행렬에 구성해야합니다. 귀하의 답변이 저를 올바른 매트릭스 형식으로 만드는데 도움이되었습니다! 매트릭스의 데이터 부분에 이전 반환을 넣으려고했지만 지금은 첫 번째 출력 벡터 복사본 만 제공합니다. – swordyfish

+0

더 명확하게 명시된 문제를 해결하기 위해 편집 됨 – Gregor

관련 문제