如何用lapply遍历数据框行并根据列值命名列表元素?
我来帮你搞定这个问题!你当前的代码有两个核心问题:一是没有正确生成并返回查询字符串,二是没给列表元素设置对应的命名。咱们一步步修正:
先明确需求
你需要的是:
- 列表的每个元素名称对应
dat$ALIAS里的值(比如Bill_Query) - 每个列表元素的内容是
"SELECT * FROM [对应FOOD值]"的查询语句(比如Bill_Query对应"SELECT * FROM Apples")
方案一:简洁的Base R实现
这种方法直接生成查询字符串向量,再转为列表并命名,是最直观高效的方式:
# 你的原始数据框 dat <- data.frame(ALIAS = c("Bill_Query", "Bob_Query", "Bernardo_Query", "Becky_Query", "Betsy_Query", "Xander_Query"), FOOD = c("Apples", "Oranges", "Bananas", "Kiwi", "Pear", "Steak Tartare")) # 生成查询字符串并转为命名列表 queries <- as.list(paste("SELECT * FROM", dat$FOOD)) names(queries) <- dat$ALIAS
测试一下效果:
queries[["Bill_Query"]] # 输出结果:"SELECT * FROM Apples"
方案二:用lapply实现(如果你偏好这种方式)
如果你坚持要用lapply,需要确保函数返回查询字符串,之后再给列表设置名字:
queries <- lapply(seq(nrow(dat)), function(x) { # 直接返回拼接好的查询语句,不要修改原数据框 paste("SELECT * FROM", dat[x, "FOOD"]) }) # 给列表元素命名 names(queries) <- dat$ALIAS
为什么你原来的代码不对?
你之前的代码dat[x, 2] <- paste("SELECT * FROM", dat[x,1])是在修改原数据框的列,而这个赋值语句的返回值是NULL,所以最后得到的queries会是一个全是NULL的列表,完全不符合你的需求。
内容的提问来源于stack exchange,提问作者DJC
相关产品推荐
相关产品推荐

