Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何用tible本身的另一个变量替换mutate_at中的列?_R_Dplyr - Fatal编程技术网

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