2014-03-03 4 views
8

게으른 데이터 세트로드 (예 : iris을 R에 입력하면 datasets 패키지의 데이터 세트가 지연되어로드 됨)와 같이 다른 텍스트 파일의 데이터를 지연 읽기를 원합니다. 차이점은 R expression을 R 콘솔에 입력하거나 다른 코드에서 사용하는 변수 (여기에서 내가 사용하는 x)가 실행될 때마다 실행되도록하려는 것입니다.처음부터 R 약속 객체 만들기 (게으른 평가)

# The expression that I want run if the variable x is called by some other code 
expn = quote({x = read.table(text = "a b \n 1 2", header=TRUE)}) 

# When I type this, I want the language object 'expn' to be evaluated 
# (e.g. eval(expn)) so that the variable x now exists 
x 

R 약속 개체를 사용하여이 작업을 수행 할 수있는 방법이 있습니까? 이 문제를 해결하려면 R 패키지를 만들어야합니까?

답변

10

당신은 delayedAssign을 찾고 있습니다.

delayedAssign('x', read.table(text = "a b \n 1 2", header=TRUE)) 

당신은 x가 처음 요청 될 때 표현식이 실행하는 것을 볼 수 있습니다

delayedAssign('x', { 
     message('assigning') 
     read.table(text = "a b \n 1 2", header=TRUE) 
    }) 
x 
# assigning 
# a b 
# 1 1 2