3 回答

TA貢獻1828條經驗 獲得超13個贊
只是為了解決您問題的最后一部分,因為這實際上指出了R list和vectorR 之間的區別:
為什么這兩個表達式不能返回相同的結果?
x = list(1、2、3、4); x2 =列表(1:4)
列表可以包含任何其他類作為每個元素。因此,您可以擁有一個列表,其中第一個元素是字符向量,第二個元素是數據幀,等等。在這種情況下,您創建了兩個不同的列表。 x有四個向量,每個向量的長度為1。 x2有1個向量的長度為4:
> length(x[[1]])
[1] 1
> length(x2[[1]])
[1] 4
所以這些是完全不同的列表。
R列表非常類似于哈希映射數據結構,因為每個索引值都可以與任何對象關聯。這是一個包含3個不同類(包括一個函數)的列表的簡單示例:
> complicated.list <- list("a"=1:4, "b"=1:3, "c"=matrix(1:4, nrow=2), "d"=search)
> lapply(complicated.list, class)
$a
[1] "integer"
$b
[1] "integer"
$c
[1] "matrix"
$d
[1] "function"
鑒于最后一個元素是搜索功能,我可以這樣稱呼它:
> complicated.list[["d"]]()
[1] ".GlobalEnv" ...
作為對此的最后評論:應該注意,a data.frame實際上是一個列表(來自data.frame文檔):
數據框是具有給定類'“ data.frame”'的具有相同行名稱的具有相同行數的變量的列表
因此,a中的列data.frame可以具有不同的數據類型,而矩陣中的列則不能。例如,在這里我嘗試創建一個由數字和字符組成的矩陣:
> a <- 1:4
> class(a)
[1] "integer"
> b <- c("a","b","c","d")
> d <- cbind(a, b)
> d
a b
[1,] "1" "a"
[2,] "2" "b"
[3,] "3" "c"
[4,] "4" "d"
> class(d[,1])
[1] "character"
請注意我如何無法將第一列的數據類型更改為數字,因為第二列具有字符:
> d[,1] <- as.numeric(d[,1])
> class(d[,1])
[1] "character"

TA貢獻2003條經驗 獲得超2個贊
關于您的問題,讓我依次解決并舉例:
1)如果return語句添加一個列表,則返回一個列表。考慮
R> retList <- function() return(list(1,2,3,4)); class(retList())
[1] "list"
R> notList <- function() return(c(1,2,3,4)); class(notList())
[1] "numeric"
R>
2)根本沒有設置名稱:
R> retList <- function() return(list(1,2,3,4)); names(retList())
NULL
R>
3)他們不會返回相同的東西。你的例子給出
R> x <- list(1,2,3,4)
R> x[1]
[[1]]
[1] 1
R> x[[1]]
[1] 1
其中x[1]返回的第一個元素x-這是一樣的x。每個標量都是一個長度為1的向量。另一方面,x[[1]]返回列表的第一個元素。
4)最后,兩者之間是不同的,它們分別創建了一個包含四個標量的列表和一個包含單個元素的列表(碰巧是四個元素的向量)。
分享編輯
- 3 回答
- 0 關注
- 782 瀏覽
添加回答
舉報