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