dplyr::n()返回“错误:n()只应在数据上下文中调用”

11
我得到了以下代码
for (i in c(1:(ncol(df_multi_paths_cols) - 1))) {

  df_cache <- df_multi_paths_cols %>%
    select(num_range("ord_", c(i, i+1))) %>% 
    #select within dataset columns with prefix and within specific range i and i+1
    na.omit() %>% 
    # The na.omit R function removes all incomplete cases of a data object 
    # (typically of a data frame, matrix or vector).
    group_by(.dots = c(paste0("ord_", c(i, i+1)))) %>% 
    #paste=concatenate strings without separator
    #  group_by() takes an existing tbl and converts it into a grouped tbl where
    # operations are performed "by group". ungroup() removes grouping.
    summarise(number = n()) %>%
    # summarise() is typically used on grouped data created by group_by(). The output will 
    # have one row for each group.
    #n()=numbe robservation in the group
    ungroup()

    colnames(df_cache)[c(1, 2)] <- c('channel_from', 'channel_to')
    df_res[[i]] <- df_cache
}

下面是错误信息:
错误:应该只在数据环境中调用n()。
在网上搜索了一下,似乎没有针对这个特定错误的解决方案。非常感谢任何提示,因为我无法弄清楚为什么n()函数在summarise中不起作用。
数据框df_multi_path_cols长这样:
> df_multi_paths_cols
     ord_1                        ord_2                    ord_3                     ord_4
1  (start)                MANAGER_SASWP            MANAGER_SRSLT             MANAGER_3RDWP
2  (start) GROUPDIRECTOR/CXO_LIVEWEBEXR GROUPDIRECTOR/CXO_SASWEB     GROUPDIRECTOR/CXO_WPR
3  (start)        GROUPDIRECTOR/CXO_SUG                   (null)                      <NA>
4  (start)        GROUPDIRECTOR/CXO_SUG  GROUPDIRECTOR/CXO_3RDWP GROUPDIRECTOR/CXO_SASLIVE
5  (start)        GROUPDIRECTOR/CXO_SUG    GROUPDIRECTOR/CXO_SUG                    (null)
6  (start)             DIRECTOR_3RDLIVE      DIRECTOR_ODSASWEBIN              DIRECTOR_SUG
7  (start)                DIRECTOR_DMCR             DIRECTOR_SUG                    (null)
8  (start)             DIRECTOR_3RDLIVE             DIRECTOR_SUG   GROUPDIRECTOR/CXO_SASWP
9  (start)                 DIRECTOR_SUG            DIRECTOR_EPCR             DIRECTOR_EPCR
10 (start)                 DIRECTOR_SUG             DIRECTOR_SUG             MANAGER_SASWP
11 (start)                  MANAGER_SUG                   (null)                      <NA>
                   ord_5                 ord_6                  ord_7                  ord_8
1          MANAGER_SASWP         MANAGER_EBOOK          MANAGER_3RDWP        MANAGER_ONASOFF
2           (conversion)                  <NA>                   <NA>                   <NA>
3                   <NA>                  <NA>                   <NA>                   <NA>
4  GROUPDIRECTOR/CXO_WBR GROUPDIRECTOR/CXO_SUG GROUPDIRECTOR/CXO_WDLR GROUPDIRECTOR/CXO_WDLR
5                   <NA>                  <NA>                   <NA>                   <NA>
6       DIRECTOR_ONASOFF          DIRECTOR_WPR            MANAGER_SUG           (conversion)

更新于2019年4月7日

dput(df_multi_paths_cols)

structure(list(ord_1 = c("(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)", "(start)" ), ord_2 = c("MANAGER_SASWP", "GROUPDIRECTOR/CXO_LIVEWEBEXR", "GROUPDIRECTOR/CXO_SUG", "GROUPDIRECTOR/CXO_SUG", "GROUPDIRECTOR/CXO_SUG", "DIRECTOR_3RDLIVE", "DIRECTOR_DMCR", "DIRECTOR_3RDLIVE", "DIRECTOR_SUG", "DIRECTOR_SUG", "MANAGER_SUG", "TEAMMEMBER_3RDLIVE", "TEAMMEMBER_3RDLIVE", "TEAMMEMBER_OTHR", "TEAMMEMBER_SASLIVE", "DIRECTOR_3RDLIVE", "DIRECTOR_SASWP", "DIRECTOR_WBR", "TEAMMEMBER_EBOOK", "TEACHER_DMCR", "TEACHER_DMCR", "TEACHER_OTHR", "TEACHER_RMCHR", "TEACHER_SUG", "TEACHER_WBR", "DIRECTOR_DMCR", "DIRECTOR_DMCR", "DIRECTOR_DMCR", "DIRECTOR_SASEXEC", "DIRECTOR_SASLIVE", "DIRECTOR_SUG", "DIRECTOR_SUG", "DIRECTOR_SUG", "TEAMMEMBER_3RDWEBIN", "_SASLIVE", "DIRECTOR_SUG", "TEAMMEMBER_3RDLIVE", "DIRECTOR_SASEXEC", "DIRECTOR_SUG", "MANAGER_TEL", "DIRECTOR_SUG", "DIRECTOR_3RDLIVE", "DIRECTOR_DMCR", "DIRECTOR_SASLIVE", "DIRECTOR_SASLIVE", "DIRECTOR_SUG", "DIRECTOR_WBR", "MANAGER_3RDLIVE", "MANAGER_SASLIVE", "MANAGER_SUG", "_CR", "DIRECTOR_SASLIVE", "DIRECTOR_3RDLIVE", "DIRECTOR_3RDLIVE", "TEAMMEMBER_SASLIVE", "DIRECTOR_SUG", "DIRECTOR_TEL", "MANAGER_3RDLIVE", "MANAGER_IKR", "MANAGER_SASEXEC", "MANAGER_SASLIVE", "MANAGER_SEFR", "MANAGER_TEL", "_CR", "_AR", "_WPR", "DIRECTOR_SASLIVE", "TEAMMEMBER_DMR", "TEAMMEMBER_ID", "TEAMMEMBER_IKR", "TEAMMEMBER_SASEXEC", "TEAMMEMBER_SASLIVE", "TEAMMEMBER_SEFR", "TEAMMEMBER_SRSLT", "TEAMMEMBER_TEL", "MANAGER_EBOOK", "MANAGER_SEFR", "DIRECTOR_COMR", "DIRECTOR_CR", "DIRECTOR_DMR", "DIRECTOR_TEL", "TEAMMEMBER_TEL", "DIRECTOR_DMR", "DIRECTOR_SASLIVE", "DIRECTOR_SASLIVE", "DIRECTOR_SRSLT", "DIRECTOR_TEL", "DIRECTOR_TEL", "MANAGER_SASLIVE", "MANAGER_WPR", "MANAGER_WPR", "TEAMMEMBER_3RDLIVE", "TEAMMEMBER_Lead GenerationR", "TEAMMEMBER_SASLIVE", "TEAMMEMBER_COMR", "TEAMMEMBER_CR", "TEAMMEMBER_DMR", "TEAMMEMBER_IKR", "TEAMMEMBER_TEL", "DIRECTOR_IKR", "DIRECTOR_SASLIVE", "DIRECTOR_SASLIVE", "DIRECTOR_SASEXEC", "MANAGER_CS", "DIRECTOR_3RDLIVE", "DIRECTOR_RMCHR", "DIRECTOR_SASEXEC", "DIRECTOR_3RDLIVE", "DIRECTOR_SASWP", "MANAGER_CR", "DIRECTOR_IKR", "DIRECTOR_SASLIVE", "TEAMMEMBER_SASLIVE", "TEAMMEMBER_CR", "MANAGER_OTHR", "TEAMMEMBER_CR", "MANAGER_SRSLT", "DIRECTOR_DMR", "DIRECTOR_IKR", "MANAGER_COMR", "MANAGER_DMR", "MANAGER_IKR", "MANAGER_TEL", "DIRECTOR_SASLIVE", "MANAGER_3RDWP", "TEAMMEMBER_WS", "DIRECTOR_3RDLIVE", "DIRECTOR_SASLIVE", "_SASLIVE", "DIRECTOR_3RDLIVE", "TEAMMEMBER_3RDLIVE", "TEAMMEMBER_COMR", "TEAMMEMBER_WPR", "TEAMMEMBER_CR", "TEAMMEMBER_ARCHWEB", "TEAMMEMBER_ASKOD", "TEAMMEMBER_SASLIVE", "TEAMMEMBER_SASLIVE", "TEAMMEMBER_SASLIVE", "TEAMMEMBER_SASLIVE", "TEAMMEMBER_WS", "GROUPDIRECTOR/CXO_SASLIVE", "MANAGER_SASLIVE", "GROUPDIRECTOR/CXO_DMCR", "GROUPDIRECTOR/CXO_SASLIVE", "GROUPDIRECTOR/CXO_SEFR", "MANAGER_3RDLIVE",


你能添加 dput(df_multi_paths_cols) 吗?另外,你能解释一下你想做什么以及你期望的输出是什么吗? - Ronak Shah
输出应填充空向量: df_res <- vector('list', ncol(df_multi_paths_cols) - 1) 其中包含许多tibble,每个tibble都由ord_i和ord_i+1列组合而成。例如,第一行(tibble)将聚合ord_1和ord_2列的行,并针对每个通道组合计算出现次数。因此,根据示例,在前两列中,对于这两列中的每个通道组合,计算出现次数。 - davide cortellino
更新:这件事对我来说似乎真的很疯狂。将代码更改为:`for (i in c(1:(ncol(df_multi_paths_cols) - 1))) { df_cache <- df_multi_paths_cols %>% select(num_range("ord_", c(i, i+1))) %>% na.omit() %>% dplyr::group_by(.dots = c(paste0("ord_", c(i, i+1)))) %>% summarise(number=dplyr::n()) %>% ungroup()colnames(df_cache)[c(1, 2)] <- c('channel_from', 'channel_to') df_res[[i]] <- df_cache}`代码就可以正常工作了。为了确保结果是可复制的,我关闭了会话,然后再次运行了代码。错误仍然存在。 - davide cortellino
顺便提一下,您还没有分享数据的dput和期望的输出。没有实际数据很难提供帮助。 - Ronak Shah
2个回答

16

通过为dplyr包的每个函数指定相对来源包,错误消失了:

for (i in c(1:(ncol(df_multi_paths_cols) - 1))) {

  df_cache <- df_multi_paths_cols %>%
    select(num_range("ord_", c(i, i+1)))   %>% 
    na.omit()  %>% 
    dplyr::group_by(.dots = c(paste0("ord_", c(i, i+1))))  %>% 
    dplyr::summarise(number=dplyr::n())  %>%
    ungroup() 

    colnames(df_cache)[c(1, 2)] <- c('channel_from', 'channel_to')
    df_res[[i]] <- df_cache
}

基本上,我认为这是与其他具有相同函数名称“summarise”的软件包发生冲突的问题,如下所证明的。
> conflicts()
  [1] "predictors"    "%>%"           "compact"       "lift"          "cols"          "%>%"          
  [7] "%>%"           "shift"         "take"          "transpose"     "%>%"           "add_row"      
 [13] "arrange"       "as_data_frame" "as_tibble"     "between"       "coalesce"      "count"        
 [19] "data_frame"    "data_frame_"   "desc"          "failwith"      "first"         "frame_data"   
 [25] "glimpse"       "id"            "last"          "lst"           "lst_"          "mutate"       
 [31] "n"             "rename"        "summarise"     "summarize"     "tbl_sum"       "tibble"       
 [37] "tribble"       "trunc_mat"     "type_sum"      "matches"       "%>%"           "%>%"          
 [43] "expand"        "expm"          "t"             "%>%"           "enexpr"        "enexprs"      
 [49] "enquo"         "enquos"        "ensym"         "ensyms"        "expr"          "quo"          
 [55] "quo_name"      "quos"          "sym"           "syms"          "vars"          "dcast"        
 [61] "melt"          "smiths"        "coerce"        "plot"          "print"         "show"         
 [67] "summary"       "t"             "cov"           "cov2cor"       "df"            "filter"       
 [73] "lag"           "lowess"        "predict"       "smooth"        "toeplitz"      "update"       
 [79] "var"           "image"         "plot"          "?"             "data"          "head"         
 [85] "tail"          "Arith"         "cbind2"        "coerce"        "Compare"       "kronecker"    
 [91] "Logic"         "Math"          "Math2"         "Ops"           "rbind2"        "show"         
 [97] "Summary"       "all.equal"     "as.array"      "as.matrix"     "body<-"        "chol"         
[103] "chol2inv"      "colMeans"      "colSums"       "crossprod"     "det"           "determinant"  
[109] "diag"          "diag<-"        "diff"          "drop"          "format"        "intersect"    
[115] "isSymmetric"   "kronecker"     "mean"          "norm"          "Position"      "print"        
[121] "qr"            "qr.coef"       "qr.fitted"     "qr.Q"          "qr.qty"        "qr.qy"        
[127] "qr.R"          "qr.resid"      "rcond"         "rowMeans"      "rownames"      "rowSums"      
[133] "setdiff"       "setequal"      "solve"         "summary"       "t"             "tcrossprod"   
[139] "union"         "unname"        "url"           "which"         "zapsmall"    

12

这是由于包之间的冲突,即在“dplyr”包和“plyr”包中都存在summarize/summarise。很可能函数被从错误的包中调用,导致了这个错误。我们可以在调用函数时引用它所在的包来避免这种问题。

举例说明:

# Call summarise from plyr library
plyr::summarise(count = n())

# Call summarise from dplyr library
dplyr::summarise(count = n())

我想这会有所帮助,如果你有任何问题,请告诉我。干杯。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接