Swirl的R练习中向量索引异常:为何x[2]被判定为最后元素?
为什么Swirl练习中选取向量最后元素用
x[3]被判错,x[2]却被判对? 这事儿我碰到过不少次,Swirl的练习题有时候藏着一些容易忽略的小细节,咱们来拆解一下你的困惑:
首先得给你吃个定心丸:你的基础认知完全没错——R确实是1-based索引,向量c(8,4,0)的最后一个元素就是x[3],运行evaluate(function(x){x[3]}, c(8,4,0))得到0的结果是正确的。那为什么Swirl会判错呢?大概率是以下两种情况之一:
1. 你可能误解了练习题的实际要求
仔细回忆一下Swirl里的题目原文:是不是题目要求的不是“选取这个特定向量的最后一个元素”,而是**“编写一个能选取任意向量最后一个元素的匿名函数”**?
如果是后者,那硬编码x[3]的写法就不符合要求了——它只能处理长度为3的向量,换成长度为2或4的向量就会出错(比如向量c(1,2),x[3]会返回NA)。Swirl的测试逻辑很可能会用多个不同长度的向量来验证你的函数是否通用,而不是只测试c(8,4,0)这一个。
这种情况下,正确的通用写法应该是:
# 用length(x)获取向量长度,动态定位最后一个元素 evaluate(function(x){x[length(x)]}, c(8,4,0)) # 或者用tail函数更简洁 evaluate(function(x){tail(x, 1)}, c(8,4,0))
2. 可能是题目描述或测试用例的小偏差
也不排除另一种可能:你可能看错了题目,比如题目实际要求是“选取向量的第二个元素”,而你理解成了最后一个。这种情况下,x[2]得到4自然会被判正确,而x[3]就不符合预期了。
验证方法
你可以回到Swirl的题目界面,重新仔细读一遍题目描述:
- 如果题目明确说“针对向量c(8,4,0)选取最后一个元素”,那可能是Swirl的测试用例出了小bug,但这种情况极少;
- 如果题目是“编写通用函数选取任意向量的最后一个元素”,那换成
x[length(x)]或tail(x,1)的写法,应该就能顺利通过测试了。
内容的提问来源于stack exchange,提问作者wRt610n12
相关产品推荐
相关产品推荐

