Map()函数内赋值触发unexpected assignment报错,求原因排查
R脚本触发"unexpected assignment"报错的原因分析
问题背景
一段原本正常运行的R脚本突然报错,触发unexpected assignment错误,相关信息如下:
数据示例
> head(datalist[[1]]) V1 V2 V3 V4 V5 1 UNCLASSIFIED -1 99.81236 - 5800696 2 k__Bacteria 2 0.18764 0.00025 650 3 k__Bacteria|p__Actinobacteria 2|201174 0.16644 0.00023 571 4 k__Bacteria|p__Proteobacteria 2|1224 0.02120 3e-05 79 5 k__Bacteria|p__Actinobacteria|c__Actinobacteria 2|201174|1760 0.16644 0.00023 571 6 k__Bacteria|p__Proteobacteria|c__Gammaproteobacteria 2|1224|1236 0.02120 3e-05 7
出错的函数代码
dfs.bac <- Map(function(x, nm) { names(x)[[names(x) == "V5"] <- nm; x[[, c("V1", nm)]; }, datalist, names(datalist))
报错信息
Error: unexpected assignment in "dfs.bac <- Map(function(x, nm) { names(x)[[names(x) == "V5"] <-"
报错原因分析
这个报错完全是语法括号不匹配导致的,R解析代码时无法正确识别赋值语句的边界,从而触发"意外赋值"错误,具体两处问题:
- 第一处:
names(x)[[names(x) == "V5"] <- nm
多写了一个[且未闭合[[,正确写法可改为names(x)[names(x) == "V5"] <- nm;若要使用[[索引,需用which()定位位置并闭合括号,比如names(x)[[which(names(x) == "V5")]] <- nm。 - 第二处:
x[[, c("V1", nm)]
同样存在括号错误,多写了一个[,正确的列索引写法是x[, c("V1", nm)]。
修正后的代码
dfs.bac <- Map(function(x, nm) { # 将V5列重命名为对应的列表名称 names(x)[names(x) == "V5"] <- nm # 提取V1和重命名后的列 x[, c("V1", nm)] }, datalist, names(datalist))
内容的提问来源于stack exchange,提问作者user2300940
相关产品推荐
相关产品推荐

