我一直在处理一个包含六个项目的数据集,我需要在整个分析中背靠背参考。我在R中相当新手,直到现在我只是复制了''''''''''''''''''''6 6 6 6 6 6 6 6 6 6 6 6
我知道在STATA中你可以使用列表进行'foreach'循环,只需在每次插入列表中的项目时在代码中设置占位符。我试图使用'for'-loop重新创建这样的东西,失败了,然后上网了。经过几个小时的搜索,我真正得到的是“不要制作僵尸代码,使用列表”:)
所以我开始阅读有关列表和lapply()函数的教程和其他材料,但我不能真正落后于如何做我想做的事情。
以下是我想要做的一个例子:
t_var1 <- table ( mydata$var1, mydata$constant ) #crosstable
p_var1 <- round ( prop.table ( crosstable ) *100, 1 ) #proptable
我希望为变量1到6做这样的事。
我在'for'-loop上的最后一次尝试看起来像这样(crosstable的例子):
varlist <- c("var1", "var2", "var3", "var4", "var5", "var6")
for (var in 1:6){
eval(parse(text=paste("t_", varlist[[var]],sep=""))) <- table (eval(parse(text=paste("mydata$", varlist[[var]],sep=""))), mydata$constant) }
我还尝试使用paste()(w / o eval(parse)),get()和'varlist'作为list()。无论哪种方式,它都会产生错误消息。考虑到整个互联网告诉我使用列表和应用函数,我倾向于相信我应该。
我已经知道列表可以包含不同类的元素,因此您可以或多或少地用您喜欢的任何内容填充它们。我想我也理解如何使用[]和[[]]来引用单个列表项。不幸的是,到目前为止我读过的所有教程和示例都使用lapply()来表示mean或summary等函数。所以我要问的是如何使用列表和正确的apply-function创建具有不同输入和输出名称的多个表(当然可以放在同一个列表中)以继续我的理解。
提前感谢您的帮助!如果需要任何进一步的信息,只需评论,我会尽力提供。
最诚挚的问候, 利奥
答案 0 :(得分:1)
您可以在varlist
循环中使用字符串向量for
的值:
attach(mydata)
crosstables<-list(NULL)
for(i in varlist)
{crosstables[[i]]<-table(get(i),constant)}
crosstables
我希望我理解,这有帮助。
修改:一种更好的方法,使用lapply()
:
lapply(mydata[1:6],table,mydata$constant)
答案 1 :(得分:0)
我不确定我是否正确理解了您的问题,但这有帮助吗?
# Creating example data
my.data <- matrix(rnorm(40,mean=1),ncol=4)
my.data2<- matrix(jitter(rbinom(20, 10, 0.7)),ncol=2)
# producing variable names
number.of.var <- dim(my.data)[2]
var.names <- c()
for (i in 1:number.of.var) {
var.names <- c(var.names, paste("var",i, sep="_"))
}
var.names
# save data to a list
new.list <- list()
for (col in 1:number.of.var) {
new.list[[col]] <- my.data[,col]
}
# name list elements
names(new.list) <- var.names
# add other table
new.list[5] <- list(my.data2)
names(new.list)[5] <- "last.not.least"
# watch at content of list
str(new.list)
# create new list with percentage data
new.list.percentage <- lapply(new.list,
function(x) {
return(x*100)
}
)
# You can also access the elements of the list with a for-loop directly:
par(mfrow=c(2,3))
for (element.in.list in new.list) {
plot(element.in.list)
}
我确信这远非最佳状态,很快就会有更深刻的知识回答,但也许有点帮助。对不起,如果我没有正确理解你的问题。
编辑:添加了第二个表,以便您可以看到该列表可以具有不同的尺寸标注元素。你可以直接访问它们(参见情节循环),但对于最后一个元素它没有多大意义。