advanced R

names and values

“<-“
a<-c(1,2,3) # 建立一个value,并将name a指向它。

2.2.1 Non-syntactic names

2.3 Copy-on-modify

2.3.1 tracemem()

可以追踪vectors是否被复制,在循环的时候应该很好用。

2.3.2 Function calls

copy与否,取决于运算前后是否改变自变量。

2.3.3 Lists

list只是存储索引与object的元件,改变值,局部copy

2.3.4 Data frames

列:改变列值,只是部分列改变,局部copy
行:改变所有列值,全部copy

2.3.5 Character vectors

建立一个character pool,然后指向特定值。如果两个值一样,则存储位置一样。

2.4 Object size

使用 lobstr::obj_size() 来查看使用的memory,只看names
object_size也可以查看内存,values+ names

list 由于只是存储reference to values, 所以大小会比预期小。

对于1:10, 只存储首尾两个元素。

2.5 Modify-in-place

循环尽量使用list,避免使用dataframe,会导致每一次新复制都会复制values。

2.5.2 Environments

2.6 Unbinding and the garbage collector

使用gc()删除内存碎片,释放内存。

Vectors

3.2 Atomic vectors

原子向量:逻辑向量、整数向量、双精度向量和字符向量。

3.2.1 Scalars 标量

3.2.2 Making longer vectors with c()

3.2.3 Missing values

使用is.na()来代替==做判断

3.2.4 Testing and coercion

检验手段:is.logical(), is.integer(), is.double(), and is.character()

强迫顺序:character → double → integer → logical.

大部分的数学运算会强制为numeric

1
2
3
x <- c(FALSE, FALSE, TRUE)
as.numeric(x)
#> [1] 0 0 1

3.3 Attributes

3.3.1 Getting and setting

attr(): 单独设置meta
attributes() :批量查看meta
structure():批量设置meta

3.3.2 Names

names(x) <- c(“a”, “b”, “c”)
setNames(1:3, c(“a”, “b”, “c”))

3.4 S3 atomic vectors

3.4.1 Factors

factor是一个integer变量,注意字符型操作的不适用

3.4.2 Dates

3.4.3 Date-times