难以理解R中双括号和单括号子集的区别

难以理解R中双括号和单括号子集的区别,r,R,我很难理解双括号子集和单括号子集之间的区别 我对开源编程相当陌生,我很难理解R中的?help函数,因为其中的一些信息对我来说太技术化了,因为我目前对R的理解是这样的。我试过用谷歌搜索差异,虽然它给了我一个想法,但我仍然不完全理解差异,特别是在下面我将使用的这个例子中 我想了解的是双括号子集是如何在这段特定代码中使用的: tmp <- vector(mode = "list", length = 10) listall <- list.files("specdata", full.na

我很难理解双括号子集和单括号子集之间的区别

我对开源编程相当陌生,我很难理解R中的?help函数,因为其中的一些信息对我来说太技术化了,因为我目前对R的理解是这样的。我试过用谷歌搜索差异,虽然它给了我一个想法,但我仍然不完全理解差异,特别是在下面我将使用的这个例子中

我想了解的是双括号子集是如何在这段特定代码中使用的:

tmp <- vector(mode = "list", length = 10)
listall <- list.files("specdata", full.names = TRUE)
tmp[[1]] <- read.csv(listall[[1]])
如果正确的话,遵循上面的双括号子集代码将把数据帧放在列表tmp[1]的第一个插槽中

为什么我必须使用双括号子集来放入数据帧? 单括号子集不行吗

 tmp[1] <- read.csv(listall[1])
有人能解释一下为什么它会显示这样的警告信息,以及为什么数据框都混淆了吗

从我对子集的有限理解。分配read.csv(listall[1])将数据帧子集化为tmp[1],tmp[1]是列表的第一个插槽


为什么这需要双括号子集?

您有两种不同的情况。(1)
listall
是一个原子向量,在这种情况下,这两种形式是等效的。(2)
tmp
是一个
列表
[
提取子列表,而
[[
提取列表的元素。您希望将
read.csv
的输出分配给列表的元素
tmp
,因此必须使用后者。(我只能在使用data.frames(列表的特例)尝试两者时才能理解两者的区别。)
 tmp[1] <- read.csv(listall[1])
Warning message:
In tmp[1] <- read.csv(listall[1]) :
number of items to replace is not a multiple of replacement length
[[1]]
[1] 1/1/2003 1/2/2003 1/3/2003 1/4/2003 1/5/2003 1/6/2003 1/7/2003 1/8/2003 1/9/2003
Levels: 1/1/2003 1/2/2003 1/3/2003 1/4/2003 1/5/2003 1/6/2003 1/7/2003 1/8/2003 1/9/2003