遍历R语言字符向量并省略元素时出错的技术咨询
为什么R里数值向量能用负索引跳过元素,字符向量却不行?
问题原因
你在数值向量里用的(1:5)[-4],本质是位置索引:负号作用的是元素的位置编号(数字4),告诉R“去掉第4个位置的元素”。但字符向量里写X[-"d"]时,R会把-"d"当成数学运算——对字符串用负号运算符,这完全不符合语法规则,自然触发错误。
正确写法
方法1:先定位元素位置,再用负位置索引
如果只需去掉单个匹配元素,用match获取第一个匹配的位置(比which更适合单元素场景):
X = c("a", "b", "c", "d", "e") for (letter in X[-match("d", X)]){ print(letter) }
如果要去掉所有匹配"d"的元素,用which:
for (letter in X[-which(X == "d")]){ print(letter) }
方法2:用逻辑索引直接筛选
更直观的方式是用逻辑条件取反,直接保留不等于"d"的元素:
for (letter in X[X != "d"]){ print(letter) }
输出结果
无论用哪种方法,都会得到预期输出:
[1] "a" [1] "b" [1] "c" [1] "e"
内容的提问来源于stack exchange,提问作者Matthew Cassell
相关产品推荐
相关产品推荐

