2016-09-14 5 views
0

dplyr과 the 및 purrr 패키지의 map 함수를 사용하여 데이터 프레임의 열에서 개별 텍스트 파일을 만들려고합니다. for 루프를 만들고 기존 열 이름을 새 txt 파일의 파일 이름으로 사용할 수 있습니다. 루프를 사용하지 않고 R의 데이터 프레임에있는 열에서 텍스트 파일 만들기

n = c(2, 3, 5) 
s = c("aa", "bb", "cc") 
b = c(TRUE, FALSE, TRUE) 
df = data.frame(n, s, b) 

가 그럼 난이 기능을 만들어 :

map(data_link, textfilecreate) 

나는이 오류가 발생했습니다 :

다음

textfilecreate <- function(filename){ 
    filename1 <- noquote(names(filename)) 
    colunmname <- select(filename, filename1) 
    myfile <- paste0("_", colunmname, ".txt") 
    write.table(colunmname, file = myfile, sep = "", row.names = FALSE, 
       col.names = FALSE, quote = FALSE, append = FALSE) 
} 

을 내가지도 함수를 호출 한 다음

는 dataframe입니다
Error in noquote(names(filename)) : attempt to set an attribute on NULL 

나는 뭔가를 놓친다는 것을 알고 있지만 나는 무엇을 정확히 지적 할 수 없다.

미리 감사드립니다.

+0

당신은'시도 noquote (이름 (안양 $ n을)) 경우 동일한 오류가있을 것이다'지도'이 순전히 더'names' – HubertL

답변

0

당신은 단순히 같은 lapply를 사용할 수 있습니다 여기에 어려움

lapply(names(df), function(colname) write.table(df[,colname],file=paste0(colname,'.txt'))) 
+0

감사가없는 각각의 컬럼에 연료 소모량을 적용합니다'때문이다. –

1

하나입니다 당신이 값 대신 데이터의 벡터에 작업을 끝낼 한 번에 각 열에 하나를 통해 map 루프, 그래서. 틀. 이로 인해 noquote과 관련된 문제가 발생합니다.

은 루프를 통해 각 열을 반환하므로 여기에서 select을 수행 할 필요가 없습니다. 나머지 문제는 파일 이름의 이름을 얻는 방법입니다.

하나의 대안은 데이터 집합과 열 이름을 동시에 반복하여 이름이있는 파일 이름을 만들고 각 열을 저장할 파일로 사용하는 것입니다. map2 대신 walk2을 사용하여 새 목록을 만들지 않으므로 두 목록을 동시에 반복합니다.

두 인수 기능 : 데이터 세트 및 walk2를 통해 열 이름을 통해

textfilecreate = function(filename, name){ 
     myfile = paste0("_", name, ".txt") 
     write.table(filename, file = myfile, sep = "", row.names = FALSE, 
        col.names = FALSE, quote = FALSE, append = FALSE) 
} 

이제 루프. 첫 번째 목록은 첫 번째 인수로 사용되며 두 번째 목록은 두 번째 인수로 사용됩니다.

walk2(df, names(df), textfilecreate) 
+0

대단하군요! 정확히 내가 무엇을 찾고 있었는지. 자세한 설명을 주셔서 감사합니다. –