我试图让数据帧的列名在另一个调用中使用它们,但是这个apply调用返回分隔的值,而不是正确连接。我在这里做错了什么?
df<-data.frame(c(1,2,3),c(4,5,6))
colnames(df)<-c("hi","bye")
apply(df,2,function(x){
paste("subscale_scores$",colnames(x),sep="")
#this is the command I am eventually trying to run
#lm(paste("subscale_scores",colnames(x))~surveys$npitotal+ipip$extraversion+ipip$agreeableness+ipip$conscientiousness+ipip$emotionalStability+ipip$intelImagination)
})
目标输出:
subscale_scores$hi
subscale_scores$bye
答案 0 :(得分:4)
是否需要apply
?
这是你的意思吗?
paste0('subscale_scores$', names(df))
# [1] "subscale_scores$hi" "subscale_scores$bye"
如果您需要将它们连接到换行符,请添加, sep='\n'
。
paste0
是paste(..., sep="")
的缩写。
关于您之后lm
来电的说明 - 如果您想lm(Y ~ ...)
分别在Y
的每个列中进行操作,请尝试:
lms <- lapply(colnames(df),
function (y) {
# construct your formula
frm <- paste0('subscale_scores$', y, ' ~ surveys$npitotal+ipip$extraversion+ipip$agreeableness+ipip$conscientiousness+ipip$emotionalStability+ipip$intelImagination')
lm(frm)
})
names(lms) <- colnames(df)
然后lms$hi
将包含lm(subscale_scores$hi ~ ...)
的输出,依此类推。
或者目标是将所有列组合在一起(Y1 + Y2 ~ ...
)
然后paste0('subscale_scores$', names(df), collapse='+')
会给你subscale_scores$hi+subscale_scores$bye
答案 1 :(得分:0)
这个怎么样?
unlist(lapply(colnames(df),function(x){
paste("subscale_scores$",x,sep="")
}))