2012-10-30 2 views
-1

나는 그렇지 않으면 "0"확인 무언가가 각 행에있는 경우 (행 길이> 1)

를 추가, 매트릭스를 가지고 있고이 "1"에 목록을 추가하려면 그 안에 함께 행 코드는 다음과 같습니다 :

is.there.A <- function(a,b,c,d,e) { 

    library(combinat) 
    x <- c(a,b,c,d,e) 
    matrix <- matrix(combn(x,3), ncol=3, byrow=T) 
    row <- nrow(matrix) 
    list <- list() 

    for (i in seq(row)) { 

    if (matrix[i,] %in% "A") {c(list, "1")} 

    else {c(list, "0")} 

    print(list) 

    } 

} 

하지만 작동하지 않습니다.

경고 메시지 :

1

이 길이> 1 첫 번째 요소가 사용되는 조건이있다 : (행렬 I,] %의 % "A") {경우에

문제는 당신은 "A" %in% matrix[i,] 테스트 다른 방법은 주위에 의미 목적

+0

왜 ifelse를 사용하지 않는? 또한 당신은 뒤로 % %를 가지고 있습니다. –

답변

1

당신은 명시 적 루프를 방지 할 수있는 기능의 미리 할당 한 후 입력합니다. 함수 이름과 오브젝트의 이름을 지정

하지 마십시오 (예 : c 또는 matrix 또는 list)

1

을 달성하기 위해이를 극복하는 방법입니다. 그러나

row <- nrow(matrix) 
list <- list() 
for (i in seq(row)) { 
    if ("A" %in% matrix[i,]) {c(list, "1")} 
    else {c(list, "0")} 
} 

rowSums(matrix == "A") > 0 

그것은 당신의 기능에 가장 적합한 출력 전에 논리의 벡터 (TRUE/FALSE)을 리턴 다시 쓸 수 있습니다. 당신이 정말로 '1'또는 '0'의 목록을 필요로하는 경우 다음과 같이 그러나, 당신은 그것을 포장 할 수 있습니다

as.list(ifelse(rowSums(matrix == "A") > 0, "1", "0")) 

을 또한 또한 이름 때문에 객체 matrix 이름을 나쁜 생각이 있습니다 , apply

is.there.A <- function(a,b,s,d,e) { 

    library(combinat) 
    x <- c(a,b,s,d,e) 
    .matrix <- matrix(combn(x,3), ncol=3, byrow=T) 

    any_A <- apply(.matrix, 1, `%in%`, x = 'A') 
    as.list(as.numeric(any_A)) 

} 

가 for 루프 내에서 객체를 성장 절대로 사용하여 R.