2017-02-13 5 views
0

데이터 프레임이 df이고 열 수가 20입니다. 변수 이름을 입력으로하는 사용자 정의 함수가 있습니다. 데이터 프레임에서 특정 열을 추출하고 그것을 반환하려고합니다. 그러나 다음 코드를 실행 한 후에 오류가 발생합니다.데이터 서브 세트에 액세스 할 수 없습니다. R

p <- function(param){ 
    df <- read.csv("data.csv",header=TRUE,stringsAsFactors=FALSE) 
    var_name <- eval(substitute(param)) 
    print(df$var_name) 
} 

이 함수는 NULL을 반환합니다. 나는이 문제가 df$var_name에 있다고 의심하지만 어떻게 해결해야할지 모르겠다. 모든 포인터가 도움이 될 것입니다.

+1

'$ '대신'[[]]'를 사용하여 열 이름으로 하위 집합을 지정하십시오. 왜 eval (subs ...())이 필요한가? 문자열 이름을 문자열로 전달하고 있습니까? –

답변

0

시도 print(var_name) 데이터 프레임에 var_name 열이 없다고 가정합니다. 아마 존재하지 않을 것입니다. 당신의 기능이 맞다고 가정하십시오!

0

난 그 입력 변수 이름이고 I는 데이터 프레임의 특정 열을 추출 반환하는 것을 시도하고, 사용자 정의 기능을 갖는다.

위의 문장은 의미가 없습니다. 변수 이름이 열 이름과 같지 않습니다. a, b, c합니다 (dataframe df에 대한) 열 이름있는 동안은 열 a, b, c와 dataframe df이있는 경우

df 변수 이름입니다. 그래서, 당신의 함수는 변수 이름을 입력하지 않습니다. 열 이름을 입력합니다.

변수 이름이 param 인 경우 eval(substitute(param)) 구조가 적합합니다. 이 이름의 가치를 제공합니다 (예 :

a <- 5 
b <- "a" 
eval(substitute(b)) 

프린트 5.

param이 열 이름이므로 구조체 eval(substitute(param))은 의미가 없습니다. (df 매트릭스보다는 dataframe, 당신은 대신 df[,param]로의 열을 액세스해야 될 경우) 당신은

df[[,param]] 

로 열을 액세스해야합니다.

+0

답안의 시작 부분에 비판의 견해에 동의하지 않습니다. 용어, 열 이름 및 변수 이름은 종종 내 필드 (생물 통계학)에서 교환 가능하게 사용되며, 데이터 세트, df , 결코 변수라고 불리지 않을 것입니다. – user20650

+0

글쎄, 당신은 그들을 교환 할 수 있지만 사용할 수있는 코드는 작동하지 않습니다. – user31264