編集:これは、data.all.filtered
データ型と関係があります。データ操作がうまくいかない
フィルタリングされたデータ型は、のいずれかで正常に動作するdata.all.raw
から作成されます。奇妙なことは...私は2つの異なるん方法を見つけることができないということです
data.selectedFeatures <- sapply(data.train.raw, FUN = sf.getGoodFeaturesVector, treshold = 5)
data.train.filtered <- lapply(seq(1, 8), FUN = function(i) sf.filterFeatures(data.train.raw[[i]], data.selectedFeatures[[i]]))
st.testFeature <- function(featureVector, treshold) {
if(!is.numeric(featureVector)) {return(T)}
numberOfNonZero <- sum(featureVector > 0)
numberOfZero <- length(featureVector) - numberOfNonZero
return(min(numberOfNonZero, numberOfZero) >= treshold)
}
sf.getGoodFeaturesVector <- function(data, treshold) {
selectedFeatures <- sapply(data, FUN = st.testFeature, treshold <- treshold)
whitelistedFeatures <- names(data) %in% c("id", "tp")
return(selectedFeatures | whitelistedFeatures)
}
sf.filterFeatures <- function(data, selectedFeatures) {
return(data[, selectedFeatures])
}
lapply
、その後は動作しなくなり、データを操作するときに私が間違っているの何任意のアイデア?
オリジナルのポスト:
私はdata.train.filtered
と呼ばれるデータセットのリストを持っており、それらの上にrplotによって訓練(tp
と呼ばれる機能を予測するための)モデルのリストを取得したいです。私が考えることができる最も簡単な解決策はlapply
を使用していましたが、何らかの理由で動作しません。
lapply(data.train.filtered, function(dta) rpart(tp ~ ., data = dta))
Error in terms.formula(formula, data = data) :
'.' in formula and no 'data' argument
問題がある可能性がありません一つだけ(任意の)データセットのためにそれを使用するなど、データに正常に動作します:
(上図のように)インデックスを経由してちょうど1つのデータセットへのアクセスが正常に動作していてもrpart(tp ~ ., data = data.train.filtered[[1]])
lapply-troughインデックスを使用すると、最初の例と同じ方法で失敗します。
lapply(1:8, function(i) rpart(tp ~ ., data = data.train.filtered[[i]]))
Error in terms.formula(formula, data = data) :
'.' in formula and no 'data' argument
インデックスバージョンのためのトレースバックは以下の通りです:
10 terms.formula(formula, data = data)
9 terms(formula, data = data)
8 model.frame.default(formula = tp ~ ., data = data.train.filtered[[i]],
na.action = function (x)
{
Terms <- attr(x, "terms") ...
7 stats::model.frame(formula = tp ~ ., data = data.train.filtered[[i]],
na.action = function (x)
{
Terms <- attr(x, "terms") ...
6 eval(expr, envir, enclos)
5 eval(expr, p)
4 eval.parent(temp)
3 rpart(tp ~ ., data = data.train.filtered[[i]])
2 FUN(X[[i]], ...)
1 lapply(1:8, function(i) rpart(tp ~ ., data = data.train.filtered[[i]]))
私はここに非常に些細な何かが欠けているが、私はちょうど問題を見つけることができませんRにはかなり新しいものだかなり確信しています。
PS:forループを介してすべてのデータセットを繰り返すことができますが、それは本当に汚いと感じています。私はRイディオムの解決策を好むでしょう。
1.実際には、おもちゃのデータを持っていると助かります。 –
2. 'lapply'ではなく' purrr :: map'を試しましたか?私はそれがその目的のために正確に意味されると信じています。 RStudioのブログで「purrr」を検索すると、2つの投稿とその例が表示されます。 –
省略形のないより長いバージョンの数式を試してください。 – Parfait