Đối số chức năng python không có

Hầu hết các động từ dplyr sử dụng đánh giá gọn gàng theo một cách nào đó. Đánh giá ngăn nắp là một loại đánh giá phi tiêu chuẩn đặc biệt được sử dụng trong toàn bộ ngăn nắp. Có hai hình thức cơ bản được tìm thấy trong dplyr

Để xác định xem một đối số hàm có sử dụng mặt nạ dữ liệu hoặc lựa chọn gọn gàng hay không, hãy xem tài liệu. trong danh sách đối số, bạn sẽ thấy

starwars %>% filter[homeworld == "Naboo", species == "Human"]
5 hoặc
starwars %>% filter[homeworld == "Naboo", species == "Human"]
5

Mặt nạ dữ liệu và lựa chọn gọn gàng làm cho việc khám phá dữ liệu tương tác trở nên nhanh chóng và linh hoạt, nhưng chúng thêm một số thách thức mới khi bạn cố gắng sử dụng chúng một cách gián tiếp, chẳng hạn như trong vòng lặp for hoặc hàm. Họa tiết này chỉ cho bạn cách vượt qua những thử thách đó. Trước tiên, chúng tôi sẽ xem xét các khái niệm cơ bản về che giấu dữ liệu và lựa chọn gọn gàng, nói về cách sử dụng chúng một cách gián tiếp, sau đó chỉ cho bạn một số công thức để giải quyết các vấn đề phổ biến

Mô tả chi tiết này sẽ cung cấp cho bạn kiến ​​thức tối thiểu cần thiết để trở thành một lập trình viên hiệu quả với cách đánh giá gọn gàng. Nếu bạn muốn tìm hiểu thêm về lý thuyết cơ bản hoặc chính xác nó khác với đánh giá không theo tiêu chuẩn như thế nào, chúng tôi khuyên bạn nên đọc các chương Lập trình siêu dữ liệu trong R nâng cao

Mặt nạ dữ liệu

Mặt nạ dữ liệu giúp thao tác dữ liệu nhanh hơn vì nó yêu cầu gõ ít hơn. Trong hầu hết [nhưng không phải tất cả] các hàm cơ sở R, bạn cần tham khảo các biến có

starwars %>% filter[homeworld == "Naboo", species == "Human"]
0, dẫn đến mã lặp lại tên của khung dữ liệu nhiều lần

starwars[starwars$homeworld == "Naboo" & starwars$species == "Human", ,]

Mã dplyr tương đương với mã này ngắn gọn hơn vì mặt nạ dữ liệu cho phép bạn chỉ cần nhập

starwars %>% filter[homeworld == "Naboo", species == "Human"]
1 một lần

starwars %>% filter[homeworld == "Naboo", species == "Human"]

Biến dữ liệu và env

Ý tưởng chính đằng sau việc che dấu dữ liệu là nó làm mờ ranh giới giữa hai nghĩa khác nhau của từ “biến”

  • biến env là biến "lập trình" sống trong môi trường. Chúng thường được tạo bằng

    starwars %>% filter[homeworld == "Naboo", species == "Human"]
    2

  • biến dữ liệu là các biến "thống kê" sống trong khung dữ liệu. Chúng thường đến từ các tệp dữ liệu [e. g.

    starwars %>% filter[homeworld == "Naboo", species == "Human"]
    3,
    starwars %>% filter[homeworld == "Naboo", species == "Human"]
    4] hoặc được tạo bằng thao tác với các biến hiện có

Để làm cho những định nghĩa đó cụ thể hơn một chút, hãy lấy đoạn mã này

Nó tạo một biến env,

starwars %>% filter[homeworld == "Naboo", species == "Human"]
5, chứa hai biến dữ liệu,
starwars %>% filter[homeworld == "Naboo", species == "Human"]
6 và
starwars %>% filter[homeworld == "Naboo", species == "Human"]
7. Sau đó, nó trích xuất biến dữ liệu
starwars %>% filter[homeworld == "Naboo", species == "Human"]
6 ra khỏi biến env
starwars %>% filter[homeworld == "Naboo", species == "Human"]
5 bằng cách sử dụng
starwars %>% filter[homeworld == "Naboo", species == "Human"]
0

Tôi nghĩ rằng việc làm mờ ý nghĩa của "biến" này là một tính năng thực sự hay để phân tích dữ liệu tương tác vì nó cho phép bạn tham khảo nguyên trạng các biến dữ liệu mà không cần bất kỳ tiền tố nào. Và điều này có vẻ khá trực quan vì nhiều người dùng R mới hơn sẽ cố gắng viết

starwars[starwars$homeworld == "Naboo" & starwars$species == "Human", ,]
31

Thật không may, lợi ích này không đến miễn phí. Khi bạn bắt đầu lập trình với những công cụ này, bạn sẽ phải vật lộn với sự khác biệt. Điều này sẽ khó vì bạn chưa bao giờ phải nghĩ về nó trước đây, vì vậy sẽ mất một thời gian để bộ não của bạn học các khái niệm và danh mục mới này. Tuy nhiên, một khi bạn đã phân tách khái niệm “biến” thành biến dữ liệu và biến env, tôi nghĩ bạn sẽ thấy nó khá đơn giản để sử dụng

gián tiếp

Thách thức chính của lập trình với các chức năng sử dụng mặt nạ dữ liệu phát sinh khi bạn giới thiệu một số hướng dẫn, tôi. e. khi bạn muốn lấy biến dữ liệu từ biến env thay vì gõ trực tiếp tên biến dữ liệu. Có hai trường hợp chính

  • Khi bạn có biến dữ liệu trong một đối số hàm [i. e. một biến env chứa đựng một lời hứa], bạn cần nắm lấy đối số bằng cách bao quanh nó trong dấu ngoặc kép, như

    starwars[starwars$homeworld == "Naboo" & starwars$species == "Human", ,]
    32

    Hàm sau đây sử dụng ôm để tạo một trình bao bọc xung quanh

    starwars[starwars$homeworld == "Naboo" & starwars$species == "Human", ,]
    33 tính toán các giá trị tối thiểu và tối đa của một biến, cũng như số lượng quan sát đã được tóm tắt

  • Khi bạn có một biến env là một vectơ ký tự, bạn cần lập chỉ mục cho đại từ

    starwars[starwars$homeworld == "Naboo" & starwars$species == "Human", ,]
    34 với
    starwars[starwars$homeworld == "Naboo" & starwars$species == "Human", ,]
    35, chẳng hạn như
    starwars[starwars$homeworld == "Naboo" & starwars$species == "Human", ,]
    36

    Ví dụ sau sử dụng

    starwars[starwars$homeworld == "Naboo" & starwars$species == "Human", ,]
    34 để đếm số lượng giá trị duy nhất trong mỗi biến của
    starwars[starwars$homeworld == "Naboo" & starwars$species == "Human", ,]
    38

    Lưu ý rằng

    starwars[starwars$homeworld == "Naboo" & starwars$species == "Human", ,]
    34 không phải là khung dữ liệu; . Đừng mong đợi các chức năng khác hoạt động với nó

lựa chọn gọn gàng

Mặt nạ dữ liệu giúp dễ dàng tính toán các giá trị trong tập dữ liệu. Lựa chọn gọn gàng là một công cụ bổ sung giúp dễ dàng làm việc với các cột của tập dữ liệu

DSL gọn gàng

Bên dưới tất cả các chức năng sử dụng lựa chọn gọn gàng là gói cleanselect. Nó cung cấp một ngôn ngữ dành riêng cho miền thu nhỏ giúp dễ dàng chọn các cột theo tên, vị trí hoặc loại. Ví dụ

  • starwars %>% filter[homeworld == "Naboo", species == "Human"]
    22 chọn cột đầu tiên;

  • starwars %>% filter[homeworld == "Naboo", species == "Human"]
    24 chọn các cột
    starwars %>% filter[homeworld == "Naboo", species == "Human"]
    25,
    starwars %>% filter[homeworld == "Naboo", species == "Human"]
    26 và
    starwars %>% filter[homeworld == "Naboo", species == "Human"]
    27

  • ________ 228 chọn tất cả các cột có tên bắt đầu bằng “a”;

  • starwars %>% filter[homeworld == "Naboo", species == "Human"]
    20 chọn tất cả các cột số

Bạn có thể xem thêm chi tiết trong

starwars %>% filter[homeworld == "Naboo", species == "Human"]
21

gián tiếp

Đối với mặt nạ dữ liệu, lựa chọn gọn gàng làm cho một tác vụ phổ biến trở nên dễ dàng hơn với chi phí làm cho một tác vụ ít phổ biến hơn trở nên khó khăn hơn. Khi bạn muốn sử dụng lựa chọn gọn gàng gián tiếp với đặc tả cột được lưu trữ trong một biến trung gian, bạn sẽ cần tìm hiểu một số công cụ mới. Một lần nữa, có hai hình thức gián tiếp

  • Khi bạn có biến dữ liệu trong biến env là đối số của hàm, bạn sử dụng kỹ thuật tương tự như mặt nạ dữ liệu. bạn chấp nhận đối số bằng cách bao quanh nó trong dấu ngoặc kép

    Hàm sau tóm tắt khung dữ liệu bằng cách tính giá trị trung bình của tất cả các biến do người dùng chọn

  • Khi bạn có một biến env là một vectơ ký tự, bạn cần sử dụng

    starwars %>% filter[homeworld == "Naboo", species == "Human"]
    22 hoặc
    starwars %>% filter[homeworld == "Naboo", species == "Human"]
    23 tùy thuộc vào việc bạn muốn hàm báo lỗi nếu không tìm thấy biến

    Đoạn mã sau sử dụng

    starwars %>% filter[homeworld == "Naboo", species == "Human"]
    22 để chọn tất cả các biến được tìm thấy trong một vectơ ký tự;

cách làm

Các ví dụ sau đây giải quyết một loạt các vấn đề phổ biến. Chúng tôi chỉ cho bạn số lượng mã tối thiểu để bạn có thể nắm được ý tưởng cơ bản;

Dữ liệu do người dùng cung cấp

Nếu bạn kiểm tra tài liệu, bạn sẽ thấy rằng

starwars[starwars$homeworld == "Naboo" & starwars$species == "Human", ,]
34 không bao giờ sử dụng mặt nạ dữ liệu hoặc chọn gọn gàng. Điều đó có nghĩa là bạn không cần phải làm bất cứ điều gì đặc biệt trong chức năng của mình

starwars[starwars$homeworld == "Naboo" & starwars$species == "Human", ,]
3

Loại bỏ
starwars %>% filter[homeworld == "Naboo", species == "Human"]
28
starwars %>% filter[homeworld == "Naboo", species == "Human"]
29s

Nếu bạn đang viết một gói và bạn có một hàm sử dụng biến dữ liệu

Bạn sẽ nhận được một

starwars %>% filter[homeworld == "Naboo", species == "Human"]
30
starwars %>% filter[homeworld == "Naboo", species == "Human"]
29

starwars %>% filter[homeworld == "Naboo", species == "Human"]
2

Bạn có thể loại bỏ điều này bằng cách sử dụng

starwars %>% filter[homeworld == "Naboo", species == "Human"]
32 và nhập
starwars[starwars$homeworld == "Naboo" & starwars$species == "Human", ,]
34 từ nguồn của nó trong gói rlang [gói cơ bản thực hiện đánh giá gọn gàng]

Một hoặc nhiều biểu thức do người dùng cung cấp

Nếu bạn muốn người dùng cung cấp một biểu thức được truyền vào một đối số sử dụng mặt nạ dữ liệu hoặc chọn gọn gàng, hãy chấp nhận đối số

Điều này khái quát một cách đơn giản nếu bạn muốn sử dụng một biểu thức do người dùng cung cấp ở nhiều nơi

Nếu bạn muốn người dùng cung cấp nhiều biểu thức, hãy nắm lấy từng biểu thức đó

starwars %>% filter[homeworld == "Naboo", species == "Human"]
2

Nếu bạn muốn sử dụng tên của các biến trong đầu ra, bạn có thể sử dụng cú pháp keo kết hợp với

starwars %>% filter[homeworld == "Naboo", species == "Human"]
34

starwars %>% filter[homeworld == "Naboo", species == "Human"]
3

Bất kỳ số lượng biểu thức nào do người dùng cung cấp

Nếu bạn muốn lấy số lượng biểu thức do người dùng cung cấp tùy ý, hãy sử dụng

starwars %>% filter[homeworld == "Naboo", species == "Human"]
35. Điều này thường hữu ích nhất khi bạn muốn cấp cho người dùng toàn quyền kiểm soát một phần duy nhất của quy trình, chẳng hạn như
starwars %>% filter[homeworld == "Naboo", species == "Human"]
36 hoặc
starwars %>% filter[homeworld == "Naboo", species == "Human"]
37

starwars %>% filter[homeworld == "Naboo", species == "Human"]
4

Khi bạn sử dụng

starwars %>% filter[homeworld == "Naboo", species == "Human"]
35 theo cách này, hãy đảm bảo rằng bất kỳ đối số nào khác bắt đầu bằng
starwars %>% filter[homeworld == "Naboo", species == "Human"]
39 để giảm khả năng xung đột đối số; . //thiết kế. ngăn nắp. org/dots-prefix. html để biết thêm chi tiết

Chuyển đổi các biến do người dùng cung cấp

Nếu bạn muốn người dùng cung cấp một tập hợp các biến dữ liệu sau đó được chuyển đổi, hãy sử dụng

starwars %>% filter[homeworld == "Naboo", species == "Human"]
40

starwars %>% filter[homeworld == "Naboo", species == "Human"]
8

Bạn có thể sử dụng cùng một ý tưởng này cho nhiều bộ biến dữ liệu đầu vào

Sử dụng đối số

starwars %>% filter[homeworld == "Naboo", species == "Human"]
41 thành
starwars %>% filter[homeworld == "Naboo", species == "Human"]
40 để kiểm soát tên của đầu ra

Lặp lại nhiều biến

Nếu bạn có một vectơ ký tự tên biến và muốn thao tác trên chúng bằng vòng lặp for, hãy lập chỉ mục vào đại từ đặc biệt

starwars[starwars$homeworld == "Naboo" & starwars$species == "Human", ,]
34

Kỹ thuật tương tự này hoạt động với các lựa chọn thay thế cho vòng lặp như họ cơ sở R

starwars %>% filter[homeworld == "Naboo", species == "Human"]
44 và họ
starwars %>% filter[homeworld == "Naboo", species == "Human"]
45 purrr

Sử dụng một biến từ đầu vào Shiny

Nhiều điều khiển đầu vào Shiny trả về các vectơ ký tự, vì vậy bạn có thể sử dụng phương pháp tương tự như trên.

starwars %>% filter[homeworld == "Naboo", species == "Human"]
46

Chủ Đề