R 使用“编写函数”;“数据”;论点

R 使用“编写函数”;“数据”;论点,r,dataframe,R,Dataframe,我想写一个函数,可以将数据框中的列或列名以及它们来自的数据框作为参数 df <- data.frame(x = c(1:5), y = c(6:10), z = LETTERS[1:5]) my_fxn <- function (aaa, bbb, ccc, data) { if (!missing(data)) { aaa = as.numeric(data$aaa) } print(aaa[1]) } 如果列名和数据框名称与函数参数的名称不同,则此选项无效

我想写一个函数,可以将数据框中的列或列名以及它们来自的数据框作为参数

df <- data.frame(x = c(1:5), y = c(6:10), z = LETTERS[1:5])

my_fxn <- function (aaa, bbb, ccc, data) {
  if (!missing(data)) {
    aaa = as.numeric(data$aaa)
  }
  print(aaa[1])
}
如果列名和数据框名称与函数参数的名称不同,则此选项无效:

> my_fxn(df$x, df$y, df$z, df)
[1] 1
> my_fxn(x, y, z, df)
[1] NA
data <- df
names(data) <- c("aaa", "bbb", "ccc")
> my_fxn(aaa, bbb, ccc, data)
[1] 1
但是,当列名和数据帧名与函数参数的名称相同时,它会起作用:

> my_fxn(df$x, df$y, df$z, df)
[1] 1
> my_fxn(x, y, z, df)
[1] NA
data <- df
names(data) <- c("aaa", "bbb", "ccc")
> my_fxn(aaa, bbb, ccc, data)
[1] 1

data问题在于调用
my_fxn(x,y,z,df)
时,对象
x
没有定义。 因此,
df$x
不会返回列
x
,而是
NA

考虑这个小例子:

df <- data.frame(x = 1:3, y = 4:6)
x <- "y"
df$x # returns column x
[1] 1 2 3
df[,x] #returns column y since the value which is stored in x is "y"
[1] 4 5 6

df有点像Cettt的背驮——类似这样的东西可能就是你想要的:


df在这种情况下,我建议使用
as.numeric(数据[[aaa]])
。如果
aaa
的长度大于1,并且保证返回向量,则它将失败
data[,aaa]
可以返回向量或data.frame,具体取决于
aaa
的长度。谢谢!如果我不想为必须是字符串的函数提供参数,该怎么办?我希望能够写
my_fxn(x,y,z,df)
而不是
my_fxn(“x”,“y”,“z”,df)
。太棒了。我们甚至可以将
deparse
substitute
函数放在
if
语句中,以简化一些事情。非常感谢你的帮助。