내가 for(i in 1:10) z[,i] <- N[,i]
같은 것을 사용하는 것이 좋습니다 것 ...
하지만.
참고 :이 작은 도구는 재밌지 만 숙련 된 사용자 (나이 아니라)는이를 피할 수 있습니다.
이것은 "언어에 대한 컴퓨팅"이라고합니다. 매우 흥미롭고 R이 작동하는 방식을 이해하는 데 도움이됩니다. 소개해 드리겠습니다.
기본 언어 구문은 숫자 또는 문자 벡터와 같은 상수입니다. 그것의 "평가되지 않은"버전과 다르지 않기 때문에 그것은 사소한 것이지만, 더 복잡한 표현을위한 빌딩 블록 중 하나입니다.
(공식적으로) 기본 언어 개체는 symbol
이며 name
이라고도합니다. 그것은 다른 객체에 대한 포인터 일뿐입니다. 즉, 존재하지 않을 수도있는 다른 객체를 식별하는 토큰입니다. 예를 들어, x <- 10
을 실행하면 은 10
을 나타내는 기호입니다. 즉, 기호 x
을 계산하면 숫자 벡터 10
이 산출됩니다. 존재하지 않는 기호를 평가하면 오류가 발생합니다.
기호는 문자열처럼 보이지만 그렇지 않습니다. 문자열을 as.symbol("x")
으로 기호로 바꿀 수 있습니다.
다음 언어 개체는 call
입니다. 이것은 재귀 객체이며, 요소가 상수, 기호 또는 다른 호출 인 list
으로 구현됩니다.첫 번째 요소는 이 아니고이되어야합니다.이 요소는 호출 될 실제 function
으로 평가되어야하기 때문에 상수 여야합니다. 다른 요소는이 함수에 대한 인수입니다.
첫 번째 인수가 기존 함수로 평가되지 않으면 R은 Error: attempt to apply non-function
또는 Error: could not find function "x"
(첫 번째 인수가 정의되지 않은 기호이거나 함수가 아닌 다른 요소를 가리키는 경우) 중 하나를 반환합니다.
예 : f(x, y+z, 2)
4 개 요소들의리스트로서 해석 될 코드 라인, 제 인 f
(기호 등), 제 인 x
(다른 기호), 다른 call
세 번째 및 네 번째 숫자 상수 . 세 번째 요소 인 y+z
은 두 개의 인수가있는 함수이며 따라서 '+'
, y
및 z
의 세 가지 이름 목록으로 구문 분석합니다.
마지막으로 호출/기호/상수의 목록 인 expression
개체도 하나씩 차례로 평가됩니다.
당신은 여기에 많은 정보를 찾을 수 있습니다 :
https://github.com/hadley/devtools/wiki/Computing-on-the-language
확인을 지금의 당신이 시도 무엇
이 작동하지 않습니다 :-) 다시 질문하자 때문에 paste
의 출력 는 문자열이고, 대입 함수는 첫 번째 인수로 심볼로 평가되는 무언가가 생성되거나 수정 될 것으로 기대합니다. 또한 첫 번째 인수는 대체 함수와 연결된 호출로 평가할 수 있습니다. 이들은 조금 까다 롭지 만 파서가 아닌 할당 함수 자체에서 처리합니다.
표시되는 오류 메시지는 target of assignment expands to non-language object
이며 대상이 문자열로 평가되기 때문에 할당 기능에 의해 트리거됩니다.
올바른 위치에 원하는 기호가 포함 된 전화를 걸 수 있습니다.
이
substitute(x -> y, list(x=as.symbol(paste("N",i,sep="")), y=substitute(z$w, list(w=paste("x",i,sep="")))))
내부 대신이 call
의 z$x1
작성
parse(text=paste('N',i," -> ",'z$x',i,sep=""))
substitute
를 사용하는이 얻을 수있는 또 다른 방법 : 가장 "무력"방법은 문자열과 사용 구문 분석 안에 모든 것을 넣어하는 것입니다 z$x2
등입니다. 외부 대체자는이 호출을 할당의 태그 세트로 사용하고 기호로는 N1
, N2
등을 값으로 사용합니다.
parse
이 expression
이고, substitute
이 call
이된다. 두 결과 모두 동일한 결과를 얻으려면 eval
으로 전달할 수 있습니다.
그냥 하나의 마지막 노트 : 나는 모든이가 언어의 내부 동작을 이해하기 위해, 교훈적인 예로서 구성되는 것을 반복하지만, 지금까지 좋은 프로그래밍 연습에서이 경우를 제외하고 parse
및 substitute
를 사용하는 입니다 은 정말로 대안이 없습니다.
'get'과'assign'을 사용합니다. 그러나 그렇게하지 마십시오 - 대신 목록을 사용하십시오. 이것에 대한 R FAQ뿐만 아니라 많은 SO 질문들 (당신이 옳은 것을 찾을 수있게 됨)이 있습니다. –