【发布时间】:2023-02-16 01:23:47
【问题描述】:
R 有两个索引运算符,[] 和[[]]。输入单个索引时,单括号将返回列表中的该元素,而双括号将返回元素本身,而不是列表中的元素。在列表元素分配期间,我知道使用双括号是可行的方法(并且两个选项之间更合乎逻辑)。但是,下面的代码块中只有一行不成功。
my_list = vector("list", 1)
my_list[1] = 25
my_list[[1]] = 89
my_list[1] = 20:25
my_list[[1]] = 85:89
my_list[1] = 20:25 不成功,并给出以下警告:
Warning message:
In my_list[1] = 20:25 :
number of items to replace is not a multiple of replacement length
虽然我不明白警告在这种情况下说的是什么,但该行未完成分配是有道理的。我的问题是:为什么my_list[1] = 25 会分配任务?它不应该也失败吗?
【问题讨论】:
-
请注意,
my_list[1:6] = 20:25会起作用。似乎如果你想用[分配一个原子向量,R 将在输入上运行as.list()或类似的。可能你想要的可以通过my_list[1:6] = list(20:25)实现 -
我的理解是
my_list[1] = 20:25把20:25变成了一个有6个项目的列表,并尝试将这些项目一项一项分配到下标[1]定义的my_list的项目中。但是,由于下标只定义了第一个项目,因此只执行第一个赋值 (20),其余分配的列表项 (21:25) 将被丢弃,R 将警告您分配的左侧和右侧不匹配。 -
使用
mylist[1]调用列表的第一个元素。您不能将长度超过 1 的任何内容分配给此列表。即列表的长度为 1,因此必须分配任何长度为 1 的内容。例如,另一个长度为 1 的列表等。请注意,mylist[1][1]与mylist[1]相同。事实上,您可以重复[1]几次,结果是一样的,即mylist[1][1][1][1][1]仍然与mylist[1]完全相同。另一方面,mylist[[1]]调用第一个列表的元素而不是第一个列表本身。因此可以取很多元素 -
RTFM,或者更好的是,RTRI(R-Inferno),用于详细了解像这样的各种怪事