r - 如何在R中迭代作为子集的列表
问题描述
我对 R 很陌生并且有一些问题。我有一个大约 6700 行和 1700 列的数据框。我想用一个名为“模拟器”的包运行一些模拟。使用这个包,您需要输入数据框的两列的名称(在下面的代码行中,它们是 J,j)然后模拟运行。
sim_par <- hapmap2gamete(geno = geno1[,c(J,j)], map = map, ref = ref, chr2exclude = 22)
我想增加脚本的自动化。我创建了一个包含两列的列表,每列都包含数据框中列的名称。我希望模拟贯穿列表的每一行。我怎么能做到?目前,我仅在使用单列列表对数据框进行子集化然后使用以下代码行之后才设法运行模拟
for (J in 1:(ncol(geno1)-1)){
for (j in (J+1):ncol(geno1)){
但这意味着我得到了很多我不需要的模拟,我只需要具有两列的列表中的特定模拟。
任何建议将不胜感激。
解决方案
如果您有一个较小的示例数据集和预期的输出示例,它会有所帮助,但听起来如果您有一个列名数据框,您可以使用它apply()
来将名称集传递到您的函数中。
例如,假设你有一个函数,它只取每一行的总和,这就是你如何将你的函数应用于成对的列名
# Dummy data
df <- data.frame(A = runif(10, min = 0, max = 10),
B = runif(10, min = 0, max = 10),
C = runif(10, min = 0, max = 10),
X = runif(10, min = 10, max = 20),
Y = runif(10, min = -10, max = 0),
Z = runif(10, min = 100, max = 200))
head(df)
A B C X Y Z
1 1.4750598 8.362330 6.978016 12.21039 -8.5725828 115.7556
2 4.0354462 1.129128 7.344782 11.37921 -6.0101677 157.4816
3 0.4487861 5.458865 1.868728 16.07851 -4.4989306 143.0767
4 6.7159017 9.716656 3.389074 18.60543 -8.8977248 124.7074
5 9.7450640 7.766489 9.853184 10.30856 -5.2577736 138.8847
# Pairs of column names
names <- cbind(J = colnames(df[, 1:3]),
j = colnames(df[, 4:6]))
names
J j
[1,] "A" "X"
[2,] "B" "Y"
[3,] "C" "Z"
# Custom function
hapmap2gamete <- function(df) {
rowSums(df)
}
# 1 to apply over rows of data frame of names
results <- apply(names, 1, function(x) hapmap2gamete(df[, c(x)]))
# function results per row
results
[,1] [,2] [,3]
[1,] 117.2306 -0.2102531 19.18841
[2,] 161.5170 -4.8810398 18.72399
[3,] 143.5255 0.9599347 17.94724
[4,] 131.4233 0.8189311 21.99450
[5,] 148.6298 2.5087156 20.16175
[6,] 143.2299 -0.3145681 20.37046
[7,] 156.6609 -4.6445246 25.92664
[8,] 163.0996 4.0362794 19.30689
[9,] 133.7253 4.4901854 18.26631
[10,] 166.0438 2.2915776 21.57703
推荐阅读
- php - 加载phpmyadmin时如何修复解析错误?
- ruby-on-rails - 如何获取使用 Nokogiri 一段时间后加载的 div 标签
- scala - 查找 Spark 数据框中非空值的计数
- flutter - 我在颤振中有一个 ExpansionTile。我想删除展开的字幕部分
- c# - 如何使用 NCrypt 通过包装(加密)导出私钥
- python - 如何在 QT-Designer 中添加新的小部件插件
- android-studio - 如何在 Flutter 中更改 Swiper 分页颜色?
- laravel - 在 laravel 项目中克隆 laradock 文件夹后无法签出原始分支
- javascript - 使用反应组件传递道具的问题
- javascript - 如何使用 Wikidata API 获取 ISO 3166-1 国家代码?