这是。的编辑版本 my initial question,我明显解释得很差,所以再次尝试。
我想对数据帧的每一列执行一个函数,并根据原始数据帧和colname命名结果对象(此处为dist类的值):
library(vegan)
d1 <- as.data.frame(matrix(rnorm(12),4,3), ncol=3, dimnames=list(NULL, LETTERS[1:3])))
Fun <-function(x){
vegdist(decostand(x,"standardize",MARGIN=2), method="euclidean")
}
d1.A <- Fun(d1$A) # A being the colname of the first column of d1
d1.B <- Fun(d1$B)
d1.C <- Fun(d1$C)
我想在我的数据框中为超过100列做。
因此,简而言之,我想将我的函数应用于我的数据框的所有列,并创建结果值,其名称由原始数据框的名称和函数正在处理的列名称粘贴。
非常感谢!
答案 0 :(得分:1)
如果您希望使用大量对象来混乱您的全局环境,则可以使用list2env
或assign
,但您可以使用list
(但我不建议这样做)。相反,您可以将所有操作/分析存储在write.table
中,然后使用lapply
和 lst <- setNames(lapply(d1, Fun),
paste("d1", colnames(d1), sep="."))
保存/写入不同的文件来执行所有操作/分析
list
上述 list2env(lst, envir=.GlobalEnv)
#<environment: R_GlobalEnv>
可用于大部分分析。如果你需要作为单独的对象。
d1.A
现在,您可以通过调用d1.B
, d1.A
# 1 2 3
#2 1.9838499
#3 1.2754209 0.7084290
#4 2.2286961 0.2448462 0.9532752
等来获取单个对象。
{{1}}
答案 1 :(得分:0)
我假设你需要创建一个数字(等于d1的列数)的类#34; dist&#34;。
如果是这种情况,您可以这样做:
for (i in 1:ncol(d1))
{
eval(parse(text=paste('d1.',colnames(d1)[i], "<-" ,"Fun(d1[,",i,"])", sep="")))
}
这在每次迭代中评估为:
d1.V1 <- Fun(d1$V1)
d1.V2 <- Fun(d1$V2)
d1.V3 <- Fun(d1$V3)