我以为我了解 map() 的工作原理,但显然我不明白。我有一个与工作目录中的真实文件相对应的文件名向量:
\nfile_names <- c("filename1", "filename2", "filename3")\nRun Code Online (Sandbox Code Playgroud)\n这有效:
\nlibrary(tidyverse)\n\ndata <- data_frame(filename = file_names) %>%\n mutate(content = map(file_names, read_tsv))\nRun Code Online (Sandbox Code Playgroud)\n但是当我想使用推荐的格式向 read_tsv 添加参数时map(\\\\(x) f(x, arg1, arg2))
data <- data_frame(filename = file_names) %>%\n mutate(content = map(\\(file_names) read_tsv(file_names, skip = 1, col_names = FALSE)))\nRun Code Online (Sandbox Code Playgroud)\n我收到错误:
\n\n\n错误
\nmutate():\n\xe2\x84\xb9 参数:content = map(function(file_names) read_tsv(file_names, skip = 1, col_names = FALSE))。\n由以下错误引起map():\n!.x必须是向量,而不是函数。
我尝试将 file_names 更改为 .x 等,但我不知道它是如何工作的。任何帮助表示赞赏。
\n从?map你可以看出:
地图(.x,.f,...,.progress = FALSE)
因此,您的函数中仍然需要.x(列表或原子向量)map,这将是您的file_names向量。您应该在第二个参数 ( ) 中提供函数.f,它允许使用多种格式来指定函数:
我认为这不是推荐的方式。
我们现在通常建议不要使用 ... 将附加(常量)参数传递给 .f
data_frame(filename = file_names) %>%
mutate(content = map(file_names, read_tsv, skip = 1, col_names = FALSE))
Run Code Online (Sandbox Code Playgroud)
您可以在 中定义一个匿名函数map,其格式function(argument) foo(argument)或简写形式\(argument) foo(argument)为 wherefoo是您在其中应用的实际函数map。
data_frame(filename = file_names) %>%
mutate(content = map(file_names, \(file_names) read_tsv(file_names, skip = 1, col_names = FALSE)))
Run Code Online (Sandbox Code Playgroud)
这更像是指定函数的“tidyverse”方式,您必须使用.x来引用第一个参数。
data_frame(filename = file_names) %>%
mutate(content = map(file_names, ~read_tsv(.x, skip = 1, col_names = FALSE)))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
121 次 |
| 最近记录: |