【发布时间】:2012-03-23 14:02:07
【问题描述】:
这是与my previous post 相关的后续问题。下面是“我想做什么”的更解释性版本,而不是“我如何使这种方法起作用”。
下面是生成“主”数据库的代码,我从中提取元素以进一步用于其他功能。我经常根据组标识号的值提取数据元素。
- 目标:我希望能够将不同的规范(如输出数据帧的名称和选择的组)“包装”到一个可以调用的函数中。
##### generating data for example
set.seed(271828)
n.elements <- c(10,10,12,14,16,18)
group.number <- rep(1001:1006, n.elements)
element.id <- c(
seq(1,n.elements[1], 1),
seq(1,n.elements[2], 1),
seq(1,n.elements[3], 1),
seq(1,n.elements[4], 1),
seq(1,n.elements[5], 1),
seq(1,n.elements[6], 1) )
x1 <- round(rnorm(length(group.number),45, 12), digits=0)
x2 <- round(rbeta(length(group.number),2,4), digits = 2)
data.base <- as.data.frame(cbind(group.number, element.id, x1, x2))
data.base
##### data.base is representative of the large database
##### suppose I need to pull a set together made up of groups:
##### 1003, 1004, and 1001
groups.set.1 <- as.data.frame(c(1003, 1004, 1001))
bank.names <- c("group.number")
colnames(groups.set.1) <- bank.names
set.sort <- matrix(seq(1,nrow(groups.set.1),1))
sort.set.1 <- cbind(groups.set.1, set.sort)
set.1 <- as.data.frame(merge(sort.set.1, data.base,
by="group.number", all.x=TRUE))
##### this is how the dataset needs to be ordered for further use
set.1 <- set.1[order(set.1$set.sort, set.1$element.id ), ]
row.names(set.1) <- seq(nrow(set.1))
编辑:假设我想执行相同的任务来生成 set.2,其中 set.2 由以下组组成:1005、1006 和 1002。我可以复制上面的内容代码,并进行相关更改。但是,我想知道是否可以指定一个函数,以便我可以将必要的更改传递给它,并让它根据需要生成输出数据帧。也许有一个名为 group.extract 的函数,我可以在其中指定如下内容:
groups.2 <- c(1005, 1006, 1002)
group.extract(set.2, groups.2)
根据提供的 cmets,列表似乎是可行的方法,并让函数调用列表,其中列表元素可以变化。
【问题讨论】:
-
看看
?assign,它允许您为名称分配值,名称可能从函数中的参数获得。这会让你开始吗?所以就像function(mySet1="set.1")assign(mySet1,42),当然要小心环境。编辑:...如您之前帖子的答案中所述。 -
我仍然不确定你想要完成什么,但从你用来描述它的词语来看,你似乎可以尝试传递一个列表(其内容可能是一切你想通过)或使用
...功能。 -
@gsk3 感谢您的建议。我现在正在处理这个问题,但我认为你的想法是可行的。
-
示例代码很清楚,但是文字,尤其是标题,混淆了问题;一个新的标题可能是有序的,可能类似于“如何通过编写函数以特定顺序获取数据子集?”
-
@Aaron 问题标题已按要求更新。