gpt4 book ai didi

r - 使用 lapply 和 !is.na 对 R 中的列表向量进行子集

转载 作者:行者123 更新时间:2023-12-04 04:48:36 25 4
gpt4 key购买 nike

我正在尝试应用我在这里找到的解决方案来生成机器学习模型:

  • Best way to name objects programmatically using R?

  • 这是一个虚拟数据集:
    data_pred <- data.frame(x1 = 1:10, x2 = 11:20, x3 = 21:30)
    data_resp <- data.frame(y1 = c(1:5, NA, 7:10), y2 = c(NA, 2, NA, 4:10))

    这是我的 for()data_pred 中的预测变量进行建模的循环方法在 data_resp 中测量响应的每一列上使用 caret包:
    # data_pred contains predictors
    # data_resp contains one column per measurement
    # 1 matching row per observation in both data_pred and data_resp

    for (i in 1:ncol(data_resp)) {

    train(x = data_pred[!is.na(data_resp[, i]), ],
    y = data_resp[!is.na(data_resp[, i], i],
    ... )
    }

    现在我正在尝试对 lapply 做同样的事情,我认为它有很多优点。我在翻译 !is.na() 时遇到问题动态标准,以便我只为每个响应使用非 NA 案例进行建模。这是我测试 lapply 的初始函数方法:
    rf_func <- function(y) {
    train(x = data_pred,
    y = y,
    method = "rf",
    tuneGrid = data.frame(.mtry = 3:6),
    nodesize = 3,
    ntrees = 500,
    trControl = trControl) }

    然后创建一个空列表来存储结果并将该函数应用于 data_resp :
    models <- list(NULL)
    models$rf <- lapply(as.list(data_resp), rf_func)

    randomForest 开始就可以正常工作可以处理 NA s,但其他方法不能,所以我需要从每个 data_resp 中删除这些行元素以及来自我的预测变量的相应行。

    我试过这个没有成功:
    train(x = data_pred_scale[!is.na(y), ],
    y = y[!is.na(y)],
    ... }

    我也试过 y[[!is.na(y)]]
    我如何将 data.frame 方法( df[!is.na(df2), ] )转换为 lapply ?

    最佳答案

    有几种不同的方法来解决它。一个简单的方法是使用匿名函数:

     lapply(data_resp, function(x) rf_func(x[!is.na(x)]))

    关于r - 使用 lapply 和 !is.na 对 R 中的列表向量进行子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17799158/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com