我正在尝试使用mtcars
本身的变量替换mtcars
中的多个列。
例如,这是使用标量替换的代码:
mutate_at(.tbl = mtcars, vars(mpg, carb), function(x) 1)
现在,我希望能够通过例如disp
来替换mpg
和carb
我试过了:
mutate_at(.tbl = mtcars, vars(mpg, carb), funs(function(x = .tbl) x[['disp']]))
mutate_impl(.data,dots)中的错误:列
mpg
不受支持 类型函数
但我宁愿选择允许传递不带引号的名称的解决方案。例如,我是否可以强制funs()
只查看正在变异的环境?
答案 0 :(得分:1)
您可以使用:
mutate_at(.tbl = mtcars, vars(mpg, carb), funs(.data$disp))
(或等效地将.data$disp
替换为.data[["disp"]]
)。
现在回答你在评论中提出的问题:
为什么它是
.data
而不是.tbl
?
因为.data
不是函数参数之一的名称,而是来自rlang
的代词。 (见?rlang::.data
)
所以这里.data
指的是通过.tbl
参数提供的数据。
请注意,您可以从不在同一函数调用的另一个参数的定义中使用参数的名称。例如,考虑基础R的+
函数。它有2个参数,即x
和y
(正如您在?"+"
中看到的那样)。
`+`(x = 2, y = 2)
# [1] 4
但
`+`(x = 2, y = x)
# Error: object 'x' not found