2014-09-03 5 views
-1

하나의 열이 "region"인 데이터 프레임 "c1"이 있습니다. 제가클래스를 유지하면서 R의 paste() 출력에서 ​​따옴표를 제거하십시오.

f1<-paste("c1","$","region",sep="") 

> f1 
[1] "c1$region" 

> sum(is.na(f1)) 
[1] 0 

) (페이스트를 사용할 때

sum(is.na(c1$region)) 
[1] 2 

class(c1$region) 
[1] "factor" 

단, I는 as.name (F1)과 as.symbol (F1)를 시도했다. 둘 다 f1을 "이름"클래스로 변환합니다. noquote (f1)은 char [1] 요소를 "noquote"클래스로 변환합니다.

> f2<-as.name(f1) 

> f2 
`c1$region` 

> sum(is.na(f2)) 
[1] 0 
Warning message: 
In is.na(f2) : is.na() applied to non-(list or vector) of type 'symbol' 

> class(f2) 
[1] "name" 

sum (is.na (f2))과 같은 쿼리에서 사용할 수있는 동안 c1 $ region의 클래스를 유지하려고합니다. 도와주세요.

+1

수행하려는 작업을 수행 할 수없는 이유에 대한 자세한 내용은 [** 여기 **] (http://stackoverflow.com/a/18228613/1478381)를 참조하십시오. –

+0

일반적인 방법은 아니지만,'sum (is.na (eval (parse (text = f1)))'은'f1'와 함께 작동합니다. –

+3

일반 문자열 인 것처럼 변수 이름과 색인을 작성하는 것은 끔찍한 일입니다 R에서 아이디어가 필요합니다. 정말로 이것이 정말로 필요한가요? 글로벌 환경에서 여러 변수가 아닌 관련 데이터를 저장하기 위해 적절한'list()'객체를 사용해야하는 것처럼 보입니다. – MrFlick

답변

0

I 해요하지 않도록 내가 당신이하려고하는,하지만 어쩌면이 도움이 될 것입니다 이해 100 % : 키 단계

c1 <- data.frame(region=c(letters[1:3], NA)) 
clust <- 1 
variable <- "region" 

f1 <- get(paste0("c", clust))[[variable]] # <--- key step 
class(f1) 
# [1] "factor" 
sum(is.na(f1)) 
# [1] 1 

, 우리가 사용하여 올바른 클러스터 데이터 프레임을 가져 get을 사용하여 그 이름을 문자 벡터로 사용한 다음 $과 달리 [[을 사용하면 문자 변수를 사용하여 원하는 열을 지정할 수 있습니다.

+0

감사합니다. 그게 효과가 있었어. – Ujjwal

+1

@Ujjwal, MrFlick의 코멘트에 유의하십시오. 방금 게으른 결정을 내리지 않기로 결심했다.하지만 프로그래밍 방식으로 작업 공간의 변수를 참조한다면 ('cX' 변수의 경우와 마찬가지로) 실제로 목록에 넣는 것을 고려해야한다. – BrodieG

관련 문제