这涉及最近关于使用函数计算标准误差的文章。以下代码有效。它是一个函数,用于将宽数据帧中的结果变量名称传递给函数,以便计算SE,以便最终在ggplot2条形图上添加为误差条。
首先创建数据
set.seed(1)
df <- data.frame(group = rep(c("group1", "group2", "group3", "group4"), 4), score1 = runif(16, 0, 10), score2 = runif(16, 3, 7))
然后编写该函数。 &#39; condGroup&#39;指定自变量&#39; group&#39;的级别。和&#39; colDV&#39;是感兴趣的结果变量的列名。
groupSEs <- function (condGroup, colDV) {
SE <- sd(df[df$group == condGroup, colDV])/sqrt(nrow(df[df$group == condGroup,]))
return(SE)
}
接下来,在组变量
中创建所有级别名称的向量groupSubset <- c("group1", "group2", "group3", "group4")
然后使用我们之前创建的函数将此向量传递给sapply
SE <- sapply(groupSubset, function(x) groupSEs(x, "score1"))
我们称之为
SE
我们得到此输出
group1 group2 group3 group4
1.237912 1.733068 1.584986 1.533830
这样有效。但是我的数据集中也有几个独立的分组变量,根据这些变量计算SE很不错。
所以我们再一次创建数据,但这次又添加了另一个分组变量。
set.seed(1)
df2 <- data.frame(groupIV1 = factor(rep(c("group1", "group2", "group3", "group4"), 4)),
groupIV2 = factor(rep(c("groupA", "groupB", "groupC", "groupD"), 4)),
score1 = runif(16, 0, 10),
score2 = runif(16, 3, 7))
这次我们上面写的函数会有一个额外的参数,分组变量的名称&#39; IVGroup&#39;
groupSEs <- function (condGroup, IVGroup, colDV) {
SE <- sd(df2[df2$IVGroup == condGroup, colDV])/sqrt(nrow(df2[df2$IVGroup == condGroup,]))
return(SE)
}
现在我们创建关卡名称的向量
groupSubset <- c("group1", "group2", "group3", "group4")
groupSubset2 <- c("groupA", "groupB", "groupC", "groupD")
我们可以将其中任何一个传递给sapply函数。我选择了第二个
SE2 <- sapply(groupSubset2, function(x) groupSEs(x, "groupIV2", "score1"))
现在我称之为
SE
我明白了
groupA groupB groupC groupD
NA NA NA NA
那为什么我不能在第二个例子中使用那个额外的参数呢?
答案 0 :(得分:0)
您的问题是,IVGroup
变量包含以字符串形式存储的列名称,因此您无法使用$
对其进行处理:您可以[, "colName"]
代替您功能将是:
groupSEs <- function (condGroup, IVGroup, colDV) {
SE <- sd(df2[df2[,IVGroup] == condGroup, colDV])/sqrt(nrow(df2[df2[,IVGroup] == condGroup,]))
return(SE)
}