2017-04-13 1 views
0

사람은 말해 줄 수 함수 내에서 생성 된 세 개의 데이터 프레임이 있습니다.R 평가 문제가

aaa.df, bbb.df, ccc.df

및 예를 들어 '모드'파라미터 (함수에서 복귀 데이터 프레임이 경우이다) AAA/BBB/CCC는

다음 두 라이너 내가 순수 이들 두 줄 응축하려고하지만 때 미세

eval(parse(text=paste("output.df<-",mode,".df", sep=""))) 
return(output.df) 

작동 약간의 간결함을 추가하여 중간 할당을 output.df로 제거하고 데이터 프레임을 출력하지 않습니다.

예 :

eval(parse(text=paste("return(",mode,".df)", sep=""))) 

은 내가 돌아 매우 큰 데이터 프레임으로 끝날 때까지 나있는 시점에서 내가 어떤 성능/메모리 히트가있을 수 가정, 첫 번째 방법을 계속하기 위해 큰 문제가되지 않습니다.

+0

문제를 다시 만들 수 있도록 충분한 정보를 제공하지 않았기 때문에 말하기가 어렵습니다. 그러나 당신은 당신의 전체적인 표정에 괄호를 넣으려고 했습니까? '(eval (구문 분석 (텍스트 = 붙여 넣기 ("반환 (", 모드, "df)", sep = "")))' – Jake

+0

그 tbh 시도하지 않았다. 나는 (지금은 자신감이 없다고 제안 했음에도) 전체 식을 괄호 안에 싸는 것은 코드 실행에 전혀 영향을 미치지 않을 것이라고 생각했을 것입니다. 그러나 여기에 내가 놓친 R 구문의 한면이있을 것입니다 ... – Pascoe

+0

함수에서 반환 할 data.frame을 선택하는 확실한 방법이 있습니다. 'eval (parse())'는 보통 R 코드에서 나쁜 생각입니다. 간단한 'get()'이라도 아마 여기에서 더 나을 것입니다. – MrFlick

답변

2

return을 제거하면 완전히 불필요하며 솔직하게 전혀 의미가 없습니다.

eval(parse(text=paste0(mode,".df"))) 

더 나은 아직, 여기 eval를 사용하지 않는 - 아마 최악의 솔루션입니다. 대신 데이터를 구조화 된 테이블이나 목록 형식으로 저장하십시오. 또는, 최악의 경우, get을 사용

get(paste0(mode, '.df')) 

하지만 실제로는, 단지 이름이 목록에 데이터를 넣어.

+0

반환 값 제거가 평가 구조 내부에서 작동하지 않는 것 같습니다. 그러나 반환 (get ... 작동합니다. 그래서 고마워요. Upvoting. 건배 ... – Pascoe

+0

또한 paste0에 +1 ... sep = ""사용 중지 할 수 있습니다 - – Pascoe

+1

@Pascoe 네, 제거 return 'return' 자체가 아무것도하지 않기 때문에 아무것도하지 않습니다 *. 내가 말했듯이, 그것은 쓸모가 없습니다. 함수를 일찍 끝내기를 원하지 않는다면,'get'와 함께 사용할 때 불필요합니다. –