2017-11-07 8 views
0
m <- matrix(1:4, ncol=2) 
l <- list(a=1:3, b='c') 
d <- data.frame(a=1:3, b=3:1) 

기본 R 객체 (행렬, 벡터,리스트 또는 데이터 프레임 ...)를 취하는 함수를 만들 수 있는지 궁금합니다. 개체의 하위 집합을 지정하는 텍스트로 예를서브 세트 인수를 텍스트 문자열로 서브 세트 화하는 기능

f1(m, '[1,1]') #to evaluate m[1,1] 
f1(l, '[[1]][2:3]') #l[[1]][2:3] 
f1(d, '$a') #d$a 

를 들어

f1 <- function(object, subset) { 
    # object'subset' 
    } 

은 (각각) 우리에게 줄 것이다 :

[1] 1 
[1] 2 3 
[1] 1 2 3 

I 함수를 추측이 평가하기 전에 두 개의 인수를 접착제로 어떻게 든 필요는 없다. 나는 하나가 일부 텍스트의 각 비트에 대한 통역의 종류를 만들 수 있고이 (매트릭스 예를 들어) 같은 것을 할 생각이 가능한 것

`[`(1,1) 

을하지만 난 (쉽게 더 직접적인 방법이있을 것이라고 생각 내 '접착제'위).

답변

1
f1<-function(object, subset){  
    return(eval(parse(text=paste0(substitute(object),subset)))) 
} 

> m=matrix(4,2,2) 
> l=list(c(1,2,3),c(2,3,4)) 
> f1(m,'[1,1]') 
[1] 4 

> f1(l,'[[1]][1:2]') 
[1] 1 2 
2

잘 갈 수있는 한 가지 방법은 eval(parse)) 방법을 사용하는 것입니다, 즉

f1 <- function(x, text){ 
    eval(parse(text = paste0(x, text))) 
} 

f1('d', '$a') 
#[1] 1 2 3 

f1('m', '[1,1]') 
#[1] 1 

f1('l', '[[1]][2:3]') 
#[1] 2 3