[英]Can I use names from a list/dataframe, to be recognised as list/dataframe name within R script for a loop function?
我想使用循环函数将列表/数据框中的名称识别为 R 脚本中的实际列表/数据框名称(用于数据分析或操作)。 我将创建一些伪数据来帮助展示我正在尝试做的事情。
这是创建 3 个列表的代码
height <- sample(120:200,200,TRUE)
weight <- sample(40:140,200,TRUE)
income <- sample(20000:200000,200, TRUE)
此代码创建一个包含这些列表名称的列表
vars <- c("height","weight","income")
下面的代码没有运行,但我想使用这样的循环代码,它从列表位置获取名称并在脚本中将其用作列表名称。 因此,它使用名称来计算平均值,并使用名称创建一个新对象。
for (i in 1:3)
{mean_**vars[i]** = mean(**vars[i]**) }
结果应该是包含平均分数的 3 个对象“mean_height”、“mean_weight”、“mean_income”
我对平均分数的计算不太感兴趣,我对使用列表中名称的能力感兴趣。 我希望能够将其扩展到其他重复的分析。
抱歉,如果上面没有表达得很好,我对 R 很陌生,所以我希望它有道理。
任何帮助都将是最有用的,或者如果您能指出我正确的方向,那就太好了。
这可能是您正在寻找的,其中lapply
将mean
函数应用于vars
(数据lapply
列表)中的每个项目。 请注意,您要使用变量名称制作数据框列表。
height <- sample(120:200,200,TRUE)
weight <- sample(40:140,200,TRUE)
income <- sample(20000:200000,200, TRUE)
vars <- list(height, weight, income)
lapply(vars, function(x) mean(x))
然后使用它创建一个输出数据帧:
df1 <- data.frame(lapply(vars, function(x) mean(x)))
colnames(df1) <- c("mean_height", "mean_weight", "mean_income")
df1
根据您的附加评论,使用vars <- list(height, weight, income)
应该允许您执行此操作:
mean(height)
mean(vars[[1]])
[1] 160.48
[1] 160.48
这应该可以输出动态命名的变量:
vars <- list(height = height, weight = weight, income = income)
for (i in names(vars)){
assign(paste("mean_", i, sep = ""), mean(vars[[i]]))
}
mean_height
mean_weight
mean_income
[1] 163.28
[1] 90.465
[1] 109686.5
但是,我建议不要那样编程,因为它会导致问题并且它的可扩展性不是很强。 例如,您可能会得到 10000 个变量。
R 中更常见的方法是使用数据列表,而不是单独的变量。
像这样:
# make this reproducible
set.seed(123)
# make an empty list for the data
raw_data <- list()
# then fill the list. The data can be of varying length in a list.
raw_data$height <- sample(120:200,200,TRUE)
raw_data$weight <- sample(40:140,200,TRUE)
raw_data$income <- sample(20000:200000,200, TRUE)
然后循环变成单行并保留您的名字,使用*apply
函数系列:
mean_data <- lapply(raw_data, mean)
# print that
mean_data
$height
[1] 159.06
$weight
[1] 90.83
$income
[1] 114000.7
请注意我们没有做的事:
全部自动处理。 好的。
我想你想要的是像下面这样的东西,它会在你的全局环境中产生三个对象,用于weight
、 height
和 list list
income
,即,
list2env(setNames(Map(mean,lst),paste0("mean_",names(lst))),envir = .GlobalEnv)
数据
height <- sample(120:200,200,TRUE)
weight <- sample(40:140,200,TRUE)
income <- sample(20000:200000,200, TRUE)
lst <- list(height,weight,income)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.