วิธีใช้ do.call ใน r (3 ตัวอย่าง)


คุณสามารถใช้ do.call() ใน R เพื่อใช้ฟังก์ชันที่กำหนดกับรายการโดยรวมได้

ฟังก์ชันนี้ใช้ไวยากรณ์พื้นฐานต่อไปนี้:

 do. call (function, list)

ตัวอย่างต่อไปนี้แสดงวิธีการใช้ do.call() ในทางปฏิบัติ

ตัวอย่างที่ 1: ใช้ do.call() กับผลรวม

รหัสต่อไปนี้แสดงวิธีใช้ do.call() เพื่อคำนวณผลรวมของค่าในรายการ:

 #create list
values_list <- list(A=c(1, 2, 3), B=c(7, 5, 10), C=c(9, 9, 2))

#calculate sum of values in list
do. call (sum, values_list)

[1] 48

ผลรวมของค่าในรายการคือ 48 .

โปรดทราบว่าเราจะได้รับข้อผิดพลาดหากเราพยายามใช้ sum() โดยตรงกับรายการ:

 #create list
values_list <- list(A=c(1, 2, 3), B=c(7, 5, 10), C=c(9, 9, 2))

#attempt to sum values in list
sum(values_list)

Error in sum(values_list): invalid 'type' (list) of argument

ตัวอย่างที่ 2: ใช้ do.call() ด้วยค่าเฉลี่ย

รหัสต่อไปนี้แสดงวิธีใช้ do.call() เพื่อคำนวณค่าเฉลี่ยของค่าในรายการ:

 #define argument to use in do.call
args <- list(1:20, na. rm = TRUE )

#calculate mean of values in list
do. call (mean, args)

[1] 10.5

ค่าเฉลี่ยของค่าในรายการคือ 10.5 .

โปรดทราบว่าเราจะได้รับข้อผิดพลาดหากเราพยายามใช้ Mean() โดยตรงกับรายการ:

 #attempt to calculate mean of values in list
mean(list(1:20), na. rm = TRUE )

[1] NA
Warning message:
In mean.default(list(1:20), na.rm = TRUE):
  argument is not numeric or logical: returning NA

ตัวอย่างที่ 3: ใช้ do.call() กับ rbind

รหัสต่อไปนี้แสดงวิธีใช้ do.call() เพื่อเชื่อมต่อหลายเฟรมข้อมูลใน R:

 #create three data frames
df1 <- data. frame (team=c('A', 'B', 'C'),
                  dots=c(22, 27, 38))

df2 <- data. frame (team=c('D', 'E', 'F'),
                  dots=c(22, 14, 20))

df3 <- data. frame (team=c('G', 'H', 'I'),
                  dots=c(11, 15, 18))

#place three data frames into list
df_list <- list(df1, df2, df3)

#row bind together all three data frames
do. call (rbind, df_list)

  team points
1 to 22
2 B 27
3 C 38
4 D 22
5 E 14
6 F 20
7 G 11
8:15 a.m.
9 I 18

ผลลัพธ์ที่ได้คือเฟรมข้อมูลที่มีแถวจากแต่ละเฟรมข้อมูลทั้งสามเฟรม

โปรดทราบว่าเราจะไม่ได้รับ data frame ที่ต้องการหากเราพยายามใช้ rbind() กับรายการโดยตรง:

 #create three data frames
df1 <- data. frame (team=c('A', 'B', 'C'),
                  dots=c(22, 27, 38))

df2 <- data. frame (team=c('D', 'E', 'F'),
                  dots=c(22, 14, 20))

df3 <- data. frame (team=c('G', 'H', 'I'),
                  dots=c(11, 15, 18))

#place three data frames into list
df_list <- list(df1, df2, df3)

#attmempt to row bind together all three data frames
rbind(df_list)

        [,1] [,2] [,3]  
df_list List,2 List,2 List,2

แหล่งข้อมูลเพิ่มเติม

บทช่วยสอนต่อไปนี้จะอธิบายวิธีใช้ฟังก์ชันทั่วไปอื่นๆ ใน R:

วิธีใช้ฟังก์ชัน paste และ paste0 ใน R
วิธีใช้ฟังก์ชันแทนที่() ใน R
วิธีใช้ฟังก์ชัน View() ใน R
วิธีใช้ฟังก์ชัน rep() ใน R

เพิ่มความคิดเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *