Очевидно, что вам нужна целая куча скобок.См. https://stackoverflow.com/a/36906989/3277050
В вашей ситуации это выглядит следующим образом:
files.split.df <- files.paths.df %>%
mutate(
no.ext = (function(x) {sub(paste0(".", x["extension"], "$"), "", x["file"])})(.)
)
Так что, если вы заключите определение всей функции в скобки, вы сможете обработать ее как обычную функцию иаргументы этому.
Новый ответ
На самом деле это совсем не тот способ использовать мутирование.Сначала я сосредоточился на части анонимной функции, не глядя на то, что вы на самом деле делаете.Что вам нужно, это векторизованная версия sub.Поэтому я использовал str_replace
из пакета stringr
.Тогда вы можете просто ссылаться на столбцы по имени, потому что в этом прелесть dplyr:
library(tidyr)
library(dplyr)
library(stringr)
files.split.df <- files.paths.df %>%
mutate(
no.ext = str_replace(file, paste0(".", extension, "$"), ""))
Редактировать, чтобы ответить на комментарий
Чтобы использовать пользовательскую функцию, где не существует векторизациифункцию, которую вы можете использовать Vectorize
следующим образом:
string_fun <- Vectorize(function(x, y) {sub(paste0(".", x, "$"), "", y)})
files.split.df <- files.paths.df %>%
mutate(
no.ext = string_fun(extension, file))
Или, если вы действительно не хотите называть функцию, которую я не рекомендую, так как ее намного сложнее читать:
files.split.df <- files.paths.df %>%
mutate(
no.ext = (Vectorize(function(x, y) {sub(paste0(".", x, "$"), "", y)}))(extension, file))