を免責事項を追加するのを忘れ反復回数は数よりも多い場合は特に、物事を管理するのが困難な方法です。あなたは
str(out[[10]])
# 'data.frame': 20 obs. of 2 variables:
# $ vara: num 1 2 3 4 5 6 7 8 9 10 ...
# $ varb: num 10 11 12 13 14 15 16 17 18 19 ...
で任意の暫定値を見ることができると、ご想像のとおり
n <- 10 # number of times you need to repeat the process
out <- vector("list", n)
out[[1]] <- thisdata
for (i in 2:n) out[[i]] <- simplefunc(out[[i-1]])
:人気の「ベストプラクティスは、」のようなもの、「data.framesのリスト」に対処するためであります最終的な結果はout[[n]]
です。
これは少しReduce
を使用して、そしてsimplefunc
に使い捨ての第二引数を追加することを簡素化することができる。
simplefunc <- function(data, ...) {
datasetfinal2 <- data %>% mutate(varb = varb+1)
return(datasetfinal2)
}
out <- Reduce(simplefunc, 1:10, init = thisdata, accumulate = TRUE)
これが効果的に行われます。
tmp <- simplefunc(thisdata, 1)
tmp <- simplefunc(tmp, 2)
tmp <- simplefunc(tmp, 3)
# ...
を(実際には、あなたが見ればソースはReduce
のため、上記の最初の提案を効果的に行っています)。
simplefunc
は、おそらく、ドロップすることができない他の引数を持っています
simplefunc <- function(data, ..., otherarg, anotherarg) {
datasetfinal2 <- data %>% mutate(varb = varb+1)
return(datasetfinal2)
}
あなたは(共通/デフォルトの方法です)、「名前で」の代わりにより、位置パラメータを渡すためにsimplefunc
に他のすべての呼び出しを変更する必要がありますけれども。
編集:あなたが知っている*それははるかに良いだろう*
Reduce(function(x, ign) simplefunc(x), 1:10, init = thisdata, accumulate = TRUE)
これは新しい問題を設定する必要があるかもしれませんが、2つのデータフレームをどのようにreduce関数に送りますか? (例えば、初期点で)。 – SlyGrogger
あなたが何をしようとしているのかは分かりません.2つのデータフレームに対してこれを別々に行うことを意味する場合は、それを2回実行します(別の方法は簡単ではありません)。 2つのデータフレームの組み合わせを意味するならば、それはあなたが 'rbind'か' cbind'のような組み合わせのどちらを意味するかによって決まります。 – r2evans
申し訳ありませんが、説明するのは少し難しいです。私は、ここで問題をより詳細に概説してきました:https://stackoverflow.com/questions/45242969/r-using-reduce-with-custom-functionそれでは、関数からの出力を後続の反復に渡すことについての柔軟性が求められます。それにもかかわらず、上記の答えは素晴らしいです。 – SlyGrogger