2017-04-03 14 views
0

私はPython dictのようなリストを使用しようとしていますが、これは関数が実行されるたびに追加できます。最終的には、データフレーム内のすべての行にこの関数を適用したいと考えています。私はいくつかのデータ上で個別に実行すると、この作品データフレームの行を反復する関数を使用してリストに要素を追加します。

foo <- vector(mode="list", length=2) 
names(foo) <- c("Larry", "Bob") 

myfun <- function(name, round, foo){ 
foo[[name]] <<- c(foo[[name]], round) 
} 

:私はいくつかのおもちゃのデータにそれをしようとしている

myfun("Larry", "R2", foo) 
myfun("Larry", "R2", foo) 
myfun("Bob", "R1", foo) 
myfun("Larry", "R1", foo) 

foo 
$Larry 
[1] "R2" "R2" "R1" 

$Bob 
[1] "R1" 

しかし、私は、データフレームの上に動作するように機能を取得することはできません:

datf <- data.frame(name = c("Larry", "Larry", "Bob", "Larry"), 
        round = c("R2", "R2", "R2", "R1")) 
mapply(myfun, name=datf$name, round=datf$round, foo=foo) 

これは(私がなぜわからない?)コンソールに次のように生成します。

[1] 1 1 2 3 

とfooの中で次のよう

foo 
$Larry 
[1] 2 

$Bob 
[1] 3 

は私の他の思考がループの中でmyfun()を適用しようとすることでした。

for(row in 1:nrow(datf)){ 
    myfun(datf$name, datf$round, foo) 
} 

しかし、これはエラーを生成します。

Error in foo[[name]] : no such index at level 2 

洞察力があれば幸いです!

+0

これは、単純な 'split()'で行うことができます: 'with(datf、splitラウンド、名前)) '。言語間を移動するときは、単に関数呼び出しを変換するのではなく、さまざまな慣用句を学習すると便利です。 Rの適切な関数は[副作用](https://en.wikipedia.org/wiki/Side_effect_(computer_science))を持つべきではないので、一般的には関数内で '<< - 'を避けるようにしてください。 – MrFlick

答えて

0

あなたが実行しようとしている関数の少し良い例とその結果は役に立ちます。私はdplyr :: mutate関数の使用について考えています。代わりに、単に単純なことをしようとしているのであれば、データフレームに新しい列を作ることができると思います。datf$new <- myfun(inputs)

関連する問題