R 数据操纵使Lappy无法工作

R 数据操纵使Lappy无法工作,r,lapply,rpart,R,Lapply,Rpart,编辑:好的,它与数据.all.filtered数据类型有关 过滤后的数据类型是从data.all.raw创建的,它可以与下面的lappy配合使用。奇怪的是我不知道这两者有什么不同 data.selectedFeatures <- sapply(data.train.raw, FUN = sf.getGoodFeaturesVector, treshold = 5) data.train.filtered <- lapply(seq(1, 8), FUN = function(i)

编辑:好的,它与
数据.all.filtered
数据类型有关

过滤后的数据类型是从
data.all.raw
创建的,它可以与下面的
lappy
配合使用。奇怪的是我不知道这两者有什么不同

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])
}
问题可能不在数据中,因为仅对一个(任何)数据集使用它就可以了:

rpart(tp ~ ., data = data.train.filtered[[1]])
即使通过索引只访问一个数据集工作正常(如上所示),使用lappy槽索引也会像第一个示例一样失败

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]])) 
10个术语。公式(公式,数据=数据)
9项(公式,数据=数据)
8 model.frame.default(公式=tp~,数据=data.train.filtered[[i]],
动作=功能(x)
{
术语使用
数据(iris)
purrr::map

datas <- split(iris, rep(sample(c(1,2,3)), length.out = nrow(iris))
models <- purrr::map(datas, ~ rpart(Species ~ ., data = .x)) # a better syntax
data使用
data(虹膜)
purrr::map

datas <- split(iris, rep(sample(c(1,2,3)), length.out = nrow(iris))
models <- purrr::map(datas, ~ rpart(Species ~ ., data = .x)) # a better syntax

datas诀窍是在原始列表上使用
lappy()
,而不是在索引向量上。例如:

# toy data:
data.train.filtered <- list()
# create 10 different length data frames:
for(i in 1:10){
  n <- rpois(1, 15)
  x = rnorm(n)
  data.train.filtered[[i]] <- data.frame(x =x,
                                         tp = 3 + 2 * x + rnorm(n)
  )
}

library(rpart)
lapply(data.train.filtered, function(dta){rpart(tp ~ ., data = dta)})
玩具数据:
data.train.filtered诀窍是在原始列表上使用
lappy()
,而不是在索引向量上。例如:

# toy data:
data.train.filtered <- list()
# create 10 different length data frames:
for(i in 1:10){
  n <- rpois(1, 15)
  x = rnorm(n)
  data.train.filtered[[i]] <- data.frame(x =x,
                                         tp = 3 + 2 * x + rnorm(n)
  )
}

library(rpart)
lapply(data.train.filtered, function(dta){rpart(tp ~ ., data = dta)})
玩具数据:
data.train.filtered好的,我终于找到了答案。问题是
data.train.all
实际上并不是我想象的那样。我在过滤过程中出错,破坏了(默默地,谢谢)一切

修复方法是使用:

data.selectedFeatures <- lapply(data.train.raw, FUN = sf.getGoodFeaturesVector, treshold = 5)

data.selectedFeatures好的,我终于找到了答案。问题是
data.train.all
实际上并不是我想象的那样。我在过滤过程中出错,破坏了(无声地,谢谢)一切

修复方法是使用:

data.selectedFeatures <- lapply(data.train.raw, FUN = sf.getGoodFeaturesVector, treshold = 5)

data.selectedFeatures 1.拥有一些玩具数据真的很有帮助。2.你有没有尝试过
purr::map
而不是
lappy
?我相信它正是为了这个目的。在RStudio博客上搜索“purrr”,找到两篇有示例的文章。尝试一个没有缩写的更长版本的公式。1.这真的有助于我有一些玩具数据。2.你试过
purr::map
而不是
lappy
吗?我相信它正是为了这个目的。在RStudio博客上搜索“purrr”,找到两篇有例子的帖子。尝试一个没有缩写的较长版本的公式。我想这就是我在评论中想要的。
purr::map
是无效的事实上,map是“愚蠢”的,它甚至看不到公式中的点。我会留到以后,但我提出的方式应该是有效的,我想知道它为什么不起作用。我想这就是我希望在我的评论中看到的。
purr::map
是无效的。实际上,map是“愚蠢的”足够了,它甚至看不到公式中的圆点。我会留到以后,但我提出的方式应该有效,我想知道为什么无效。这就是我在第一个例子中所展示的不起作用的东西。或者我遗漏了什么?我想这就是为什么你需要一个可复制的例子。这就是我所展示的不起作用的东西在第一个例子中不起作用。或者我遗漏了什么?我想这就是为什么你需要一个可复制的例子。