0

forループを作成する必要がなく、既存の列名をファイル名として使用できるように、dplyrとpurrrパッケージのmap関数を使用して、データフレームの列から個々のテキストファイルを作成しようとしています新しいtxtファイル用。

データフレームは次のとおりです。

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

次に、この関数を作成しました:

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)
}

次に、マップ関数を呼び出しました。

map(data_link, textfilecreate)

このエラーが発生しました:

Error in noquote(names(filename)) : attempt to set an attribute on NULL

何かが欠けていることは知っていますが、何が欠けているのかを正確に特定することはできません。

前もって感謝します。

4

2 に答える 2

2

ここでの問題の 1 つは、map各列を一度に 1 つずつループするため、data.frame ではなく値のベクトルで作業することになります。これにより、 で発生していた問題が発生しますnoquote

ただし、ループして各列を返すためselect、ここで -ingを行う必要はありません。map残りの問題は、ファイル名の名前を取得する方法です。

1 つの代替方法は、データセットと列名を同時にループ処理し、名前を使用してファイル名を作成し、各列を保存するファイルとして使用することです。新しいリストを作成しないため、2 つのリストを同時にループするwalk2代わりに使用します。map2

2 引数関数:

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。デフォルトでは、最初のリストが最初の引数として使用され、2 番目のリストが 2 番目の引数として使用されます。

walk2(df, names(df), textfilecreate)
于 2016-09-14T02:26:42.553 に答える
0

lapply次のように簡単に使用できます。

lapply(names(df), function(colname) write.table(df[,colname],file=paste0(colname,'.txt')))
于 2016-09-14T00:54:28.573 に答える