R 如何用tible本身的另一个变量替换mutate_at中的列?
我试图用R 如何用tible本身的另一个变量替换mutate_at中的列?,r,dplyr,R,Dplyr,我试图用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)中出错:不支持
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()
只查看正在变异的环境吗?您可以使用:
mutate_at(.tbl = mtcars, vars(mpg, carb), funs(.data$disp))
(或等效地将.data$disp
替换为.data[[“disp”]]
)
现在回答您在评论中提出的问题: 为什么是
.data
而不是.tbl
因为.data
不是函数参数之一的名称,而是rlang
中的代词。(参见?rlang::.data
)
因此这里.data
指的是通过.tbl
参数提供的数据
请注意,您可以在同一函数调用的另一个参数的定义中从不使用参数的名称。例如,从Basic R中考虑<代码> +>代码>函数,它有2个参数,即“代码> x< /代码>和<代码> y>代码>(如您可以在<代码> +“< /代码>中看到”)。
但是
简单明了:
mtcars%>%变异(mpg=disp,carb=disp)
?但我确信这不是你想要的吗?mutate_at(.tbl=mtcars,vars(mpg,carb),funs(.data$disp))
?@Scarabee为什么是.data
而不是.tbl
?从文档中看,似乎没有任何参数.data
。另外,您是否可以调整您的解决方案,使用[
?@Scarabee提取引用的rlang版本:
`+`(x = 2, y = 2)
# [1] 4
`+`(x = 2, y = x)
# Error: object 'x' not found