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
语句中,以简化一些事情。非常感谢你的帮助。