gpt4 book ai didi

r - 在R函数中,将数据框对象指定为名称?循环遍历函数

转载 作者:行者123 更新时间:2023-12-01 13:36:42 24 4
gpt4 key购买 nike

我的问题有两个。首先,给出这三个数据框:

df1 <- data.frame(k1 = runif(6, min=0, max=100), 
k2 = runif(6, min=0, max=100),
k3 = runif(6, min=0, max=100),
k4 = runif(6, min=0, max=100))
df2 <- data.frame(k1 = runif(6, min=0, max=100),
k2 = runif(6, min=0, max=100),
k3 = runif(6, min=0, max=100),
k4 = runif(6, min=0, max=100))
df3 <- data.frame(k1 = runif(6, min=0, max=100),
k2 = runif(6, min=0, max=100),
k3 = runif(6, min=0, max=100),
k4 = runif(6, min=0, max=100))

我想使用此函数重新格式化和重命名每个数据框的一部分:

samplelist<-c("k2", "k4")

draft_fxn<-function(x, obj_name){
x.selected<-x[,c(samplelist)] #select columns of choice
colnames(x.selected)[1:2]<-paste(obj_name, colnames(x.selected), sep="_") #rename columns so they include original data frame name
return(x.selected)
}

#Example run and output:
df2_final<-draft_fxn(df2, "df2")
#output from:
head(df2_final[1:2],)
> df2_k2 df2_k4
>1 5.240274 53.03423
>2 5.042926 34.78974

第一个问题:如何更改我的函数,这样我就不必输入“df2,“df2””。在我的 Draft_fxn 代码中,我想用输入数据帧的名称替换“obj_name”。在我的示例中,它是“df2”。

第二个问题:如何循环遍历所有数据框?也许,类似于这个 for 循环? objs<-c(df1, df2, df3)

for (file in objs){
out<-draft_fxn(file); return(out)
} #this doesn't work though.

最佳答案

回答你的第一个问题:你可以使用deparse(substitute(x))获取对象x的名称。因此,要从函数中消除参数 obj_name,您可以使用

draft_fxn <- function(x){
obj_name <- deparse(substitute(x))
x.selected<-x[,c(samplelist)]
colnames(x.selected)[1:2]<-paste(obj_name, colnames(x.selected), sep="_") #rename columns so they include original data frame name
return(x.selected)
}

关于你的第二个问题,如果你想对多个数据框执行这样的操作,你通常会将它们放在一个列表中,然后lapply该函数。然而,在这种情况下,它不起作用,因为如果将数据帧放入列表中,对象名称会发生​​变化,即 deparse(substitute(x)) 返回 X[[i] ]_而不是单个数据框的名称。如果您想在循环中执行此操作,我建议您采用不同的方法,其中传递数据帧名称的向量:

## Names of the relevant data frames:
objNames <- c("df1", "df2", "df3")
## Function to rename the specified columns:
renameFun <- function(xString){
x <- get(xString)[,c(samplelist)]
colnames(x) <- paste(xString, samplelist, sep = "_")
x
}

## Apply function to all data frames specifed by objNames:
lapply(objNames, renameFun)
# [[1]]
# df1_k2 df1_k4
# 1 54.232123 2.178375
# 2 16.816784 23.586760
# 3 6.612874 16.509340
# 4 92.399588 71.133637
# 5 22.917838 8.127079
# 6 43.563411 21.118758
#
# ...

关于r - 在R函数中,将数据框对象指定为名称?循环遍历函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43883668/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com