2017-12-22 6 views
2

는 다음과 같이 호출
건물() 호출 prgramatically이야

my_simplecode <- "mtcars" 
call("str", as.name(my_simplecode)) 
#> str(mtcars) 

문제는 괄호 또는 괄호와 같은 일부 기호 코드에있을 때 as.name()이 역 따옴표를 도입한다는 것입니다 :

my_code <- "mtcars[, 1:2]" 
call("str", as.name(my_code)) 
#> str(`mtcars[, 1:2]`) 

그리고이 호출은 평가할 수 없습니다. str(mtcars[, 1:2])에 대한 전화를해야하지만 따옴표를 제거 할 수 없습니다. quote(), enquote(), parse(), deparse(), expression() 등의 모든 조합을 시도했습니다. 성공없이.

my_code일 수 있습니다.입니다. 변수 이름, 또는 더 일반적으로 함수 호출, 파이프 등을 포함한 모든 표현식.

이것은 Using call() with namespace address (:: or :::)과 유사하지만 기능 이름에 문제가있었습니다.

미리 감사드립니다.

+0

는'my_code'는 이름이 아닙니다. 그것은 함수 호출입니다. 당신은'parse'를 사용할 필요가 있습니다. 그러나 fortune 패키지의 유명한 인용문을 염두에 둡니다 :'parse'가 답이라면 틀린 질문을하고있는 것입니다. – Roland

+0

롤랜드, 고마워요,하지만 파스는 내가 ("str", 구문 분석 (텍스트 = my_code)) 호출하면 이후, 나는 얻을 것이다 : str (expression (mtcars [, 1 : 2])). 또한 my_code는 첫 번째 예제에서와 같이 이름을 포함하여 무엇이든 될 수 있습니다. –

+0

당신이하고 싶은 것과 그 이유를 더 자세히 설명해야합니다. 문자열을 구문 분석해야합니다. 문제는 이제 다음에해야 할 일이지만 목표를 충분히 지정하지 않았습니다. – Roland

답변

0

나는 quote/enquote 기능에서와 같은 숙련 아니지만, 단지 특정 컬럼의 구조를 점점이 경우, 당신이 call에 보내려고하는지에 대한 약간의 함수를 작성할 수있을만큼 쉬운 수 있습니다 . ,

str_limited <- function(x, rows, cols) str(x[rows, cols])

당신은 다음과 같은 기능이 call로가는 것을 사용 부분 집합 할 행 및/또는 열 번호로 호출 할 수 있습니다

예를 들어,이 기능을 썼다 인수는 cols = 1:2 :

call("str_limited", as.name("mtcars"), cols = 1:2)입니다. eval와 그 결과를 테스트

주었다

'data.frame': 32 obs. of 2 variables: $ mpg: num 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ... $ cyl: num 6 6 4 6 8 6 8 4 4 6 ...

하는, 내가 제대로 이해한다면, 당신은 평가에 찾고있을 것 출력입니다.

내 솔루션은 일반적으로 의심 스러울 때 함수를 작성하십시오!

+0

카밀 감사합니다. 그러나 이것은 단지 최소한의 예일뿐입니다. 나는이 특별한 기능을 찾지 않았다. my_code는 무엇이든 될 수 있으며 실제로 함수 내에서 사용되기 때문에 함수 인수에서옵니다. –

0

전혀 우아하지,하지만이 작품 :

my_code <- "mtcars[, 1:2]" 
my_lang <- eval(parse(text = paste0("quote(", my_code, ")"))) 
call("str", my_lang) 
#> str(mtcars[, 1:2])