2016-07-27 5 views
0

他のいくつかのテーブルからコンパイルされた情報に基づいて、大量の製品固有のテーブルを生成しています。私が作成する製品表の数量のために、その名前が生成されます。私はオブジェクトの特定の名前ではなく、文字列を使用してベクトル値を割り当てることを検討しています。最終的に私はforループで参照する必要があります。文字列によって参照されるdfにベクトル値を割り当てます。

product<-list("A", "B", "C") 
assign(paste(product[3],"_gen", sep=""), as.data.frame(matrix(nrow=3, ncol=5))) 

このマトリックスが作成されました。私は特定のベクトルを変更するために元の文字列を参照するために探しています。私は元のペースト参照を使用してC_gen [3,2]を5の値に変更したいと思います。私は<使用して、さまざまな方法が失敗しました - と割り当てる()関数を、おそらく私が何をしようとしています何の根拠を示すための最良の方法はである:あなたが聞いて何をすべきか

​​
+1

'sapply'に' USE.NAMSE = TRUE'を、 'simplify = FALSE'で行列を含む名前付きリストオブジェクトを作成してみませんか?おそらく、名前付き行列の束であなたの地球環境を揺るがすより良いアイデアでしょう。次に、適用関数を使用して行列を反復し、後に他の計算を行うことができます。 – dayne

答えて

0

一つの方法です自分でコールを生成してから、グローバル環境でコールを評価するだけです。 ?callを読んで、this siteをご覧ください。

## Create two matrices, "mat1" and "mat2" 
mat1 <- matrix(1:10, ncol = 2) 
mat2 <- matrix(1:10, ncol = 2) 

## Need a vector of the matrix names 
nms <- c("mat1", "mat2") 

## Create a function to generate calls 
mkCall <- function(x) call("<-", call("[", as.name(x), 1, 2), 100) 

## Create and evaluate calls 
calls <- lapply(nms, mkCall) 
sapply(calls, eval, envir = globalenv()) 

別のアプローチは、this answerに示すように、式に文字列を変換するためにparseを使用することです。あなたは大体概説問題のために

calls2 <- paste0(nms, "[1, 2] <- 150") 
calls2 <- lapply(calls, function(x) parse(text = x)) 
sapply(calls2, eval, envir = globalenv()) 

、私はまだ戻って、その後、[[を使用して、個々の行列にアクセスsapplyを使用して、元の行列を生成するために、はるかに良いことだと思います。

関連する問題