R语言中lapply如何使用未知变量名引用列并赋值给DGElist对象
问题原因
你遇到的问题确实和列引用方式有关:R 中 $ 运算符会将后续的标识符作为固定的字面量解析,不会把它当作存储了列名的变量处理。你写的 dge_obj$samples$x 实际是在给 samples 子表新增一个名为x的固定列,而非使用x变量存储的字符串作为新列名。同时lapply的匿名函数内部默认是局部作用域,普通赋值不会修改外部的dge_obj对象。
解决方法
有两种常用的实现方式,都可以达到你的需求:
方式1:修正后的lapply写法
用双括号[[]]替代$实现动态列名引用,同时用全局赋值运算符<<-把修改同步到外部的dge_obj:
lapply(control_for, function(x) { col_value <- as.factor(sampleTable[[x]]) dge_obj$samples[[x]] <<- col_value })
方式2:更易读的for循环写法
这种遍历赋值的场景直接用for逻辑更直观,不需要额外处理作用域问题:
for (col_name in control_for) { dge_obj$samples[[col_name]] <- as.factor(sampleTable[[col_name]]) }
内容的提问来源于stack exchange,提问作者helen_haustein
相关产品推荐
相关产品推荐

