2017-02-21 11 views
0

この質問には誰が最初に感謝しますか?私は(キャロラインパッケージから)pct関数を適用したいデータフレームを最大10個持っています。オーバーフローエラーの原因となるデータが原因で、すべてのセルを1000で除算する必要があります。これが発生すると、問題なくpct関数を適用できます。次に、元のデータを整理して新しいデータフレームを作成します。複数のデータフレームにpct関数を適用する

私は、結果を保存しないという点を除いて正しいことをする以下の関数を書くことができました(return文が不足している可能性があります)。それゆえ、私はそれを長く手にすることができました。しかし、それは最も重要なことではありません。

require (pct) 
finallist <- list(A, B) 

lapply(finallist , function (foo) { 

temp <- as.data.frame(foo[,1]) 
checks <- cbind(temp, foo[,2:480]/1000) 
checka <- pct(checks, tickerlist) 
foo <- checka[c(1, 481:959)] 
}) 

AとBのデータは、この

A <- structure(list(mgrname = c("Man A", "Man A", "Man A", "Man B", "Man B", "Man B", "Man C", "Man C", "Man C"), 
        ticker = c("AAPL", "MSFT", "TLSA", "AAPL", "MSFT", "TLSA", "AAPL", "MSFT", "TLSA"), 
        share = c(20L, 30L, 40L, 20L, 10L, 50L, 20L, 20L, 80L)), 
      .Names = c("mgrname", "ticker", "share"), 
      row.names = c(NA, -9L), 
      class = "data.frame") 

Bのように形成されているフレームとは、実際のキーがアウトフレームに新しいデータを試してみて、書くことです

同じになります。私が始めたコードは、目に見えない機能(私はそれがどこかにアサイン機能を持つべきだと思う)

invisible(lapply (names(finalist), 
       function (foo) assign (x = y, value = temp <-  as.data.frame(foo[,1]), 
       checks <- cbind(temp, foo[,2:480]/1000), 
       checka <- pct(checks, tickerlist), 
       foo <- checka[c(1, 481:959)] , envir =.GlobalEnv))) 

を使用しています。しかし、それは最後のデータフレームがうまくいけば、この

のようになります。

Error in lapply(names(finalist), function(foo) assign(x = y, value = temp <- as.data.frame(foo[, : 
    object 'finalist' not found 

語ります

| mgrname | APPL | MSFT | TLSA | 
    |---------|--------|-------|-------| 
    | Man A | .33 | .5 | .23 | 
    | Man B | .33 | .16 | .30 | 
    | Man C | .33 | .33 | .47 | 
+0

"finallist"オブジェクトを2つの 'l 'で定義しているようですが、' lapply'ではただ1つの 'l'だけ' finalist'を使います。 'finalist'を' l'で定義したことがないので、オブジェクトが見つかりません。エラーです。 – Gregor

+0

あなたはデータフレームのリストを使って良いことがあるのですが、なぜあなたがあなたの 'lapply'の中で' assign'を使いこなしているのか分かりません。 'y'は変更されていないので、' assign 'の 'x = y'引数は特に奇妙です。また、いくつかの中括弧が欠けていますか?引数に 'x = y'、' value = temp < - ... '、' checked < - ... 'という引数を'割り当て 'ているようです。関数引数の中で '< - 'を使うのは、通常は悪い形式(と不要)と考えられています... – Gregor

+0

'function(foo)'を実行するとき、 'foo'は関数の入力名です。これを出力として使用します。私はあなたの例が、同じ 'A'と' B'入力を使ってやや不明瞭になっていると思います。あなたのデータフレームが実際に同じ構造を持っていれば、それらを1つのデータフレームに結合し、 'dplyr'または' data.table'を使用してグループ単位で操作する方が良いでしょう。 – Gregor

答えて

0

このコードが機能することがわかりました。操作が

newlist <- lapply(finallist , function (foo) { 
temp <- as.data.frame(foo[,1]) 
checks <- cbind(temp, foo[,2:4]/100) 
checka <- pct(checks, c("AAPL", "MSFT", "TLSA")) 
foo <- checka[c(1, 5:7)] 
}) 

そして、これを使用

は、最初に行います。 Namingsなどは少し離れているが、私はそれを処理できると思う。

関連する問題