2017-09-19 14 views
0

複数のデータフレームに列を追加しようとしています。私は、列を追加する関数を作成しようとしていると私はオブジェクトのリストを介してlapplyでその関数を使用したいと思います。この関数は現在、空の列をデータフレームに追加するだけです。しかし、私が以下の問題を解決したら、新しい列を自動的に作成して(そしてオブジェクトの最初の名前を保持して)自動的に追加したいと思います。 これは私がこれまで持っているコードです:私はこのユーザー定義関数を使用してデータフレームに列を追加する

a <- data.frame(matrix(ncol=6,nrow=100)) 
add_empty_metadata(a) 

を実行して、「」まだ6列の代わりに、12 Iを持って地球環境 オブジェクトを見たときしかし

AAA_Metadata <- data.frame(AAA_Code=character(),AAA_REV4=character(),AAA_CONCEPT=character(),AAA_Unit=character(),AAA_Date=character(),AAA_Vintage=character()) 
add_empty_metadata <- function(x) { 
temp_dataframe <- setNames(data.frame(matrix(ncol=length(AAA_Metadata),nrow=nrow(x))),as.list(colnames(AAA_Metadata))) 
x <- cbind(temp_dataframe,x) 
} 

私が実際に関数内の "a"のコピーに取り組んでいることを理解しています(チェックした他のトピック、例えばUpdate data frame via function doesn't workに基づいています)。だから私は試してみました:

x <<- cbind(temp_dataframe,x) 

x <- cbind(temp_dataframe,x) 
assign('x',x, envir=.GlobalEnv) 

しかし、これらの作品のどれを。私は将来の参照のために地球環境の中で新しい環境を作り、名前を変えないようにしたい。私がここで間違っていることは何ですか?

+1

関数の最後に 'return(x)'ステートメントが必要ですか? – screechOwl

+0

@screechOwl return(x)は、期待される結果を出力しますが、 "新しい" aを地球環境に追加しません。しかし、あなたは正しいです、私は追加されたデータフレームを再利用/参照できるようにしたいと言っていることを忘れました。 –

+2

AAA_Metadata = WIS_Metadataですか? – screechOwl

答えて

0

は、あなたが探しているものは以下です:もののこの種の

addCol <- function(x, newColNames){ 
    for(i in newColNames){ 
     x[,i] <- NA 
    } 
    return(x) 
} 
a <- data.frame(matrix(ncol=6,nrow=100));dim(a) 
a <- addCol(a, newColNames = names(WIS_Metadata));dim(a) 

アメージングソースは、ウェブサイトhereハドリーウィッカムにより高度なRです。

Rオブジェクトは変更できません。破壊されて同じ名前で再構築されます。 aは決して変更されません。これは関数の入力として使用され、関数内の結果オブジェクトがreturnを介して再割り当てされない限り、関数内のバージョン(これは別の環境です)は、関数が完了すると、

+0

これは近いと私は私の質問でより正確にする必要があると思う。 –

+0

これをいくつかのデータフレームにどのように適用すればよいですか? (おそらくlapplyやmapplyを使って) –

+1

newDataFrameがnewDataFrameであり、newColNamesが文字ベクトルである限り、 'newDataFrame < - addCol(newDataFrame、newColNames)'は動作するはずです。 – screechOwl

関連する問題