[英]How to create new function from output of previous function in R?
对于R编程和一般编程,我一无所知,但是我有两段遇到类似问题的代码(对我来说)。 开始了...
(一种)
我目前有一个返回患者记录,试验编号和其他信息的函数。 看起来像这样:
ID trial start finish mark mean number
903 A34 19 90910 18775077 8236 -0.0197 1.972876
904 A34 19 18782377 23089165 2343 0.0374 2.052525
905 A34 19 23093018 43203507 10267 -0.0162 1.977668
906 A34 19 43203990 43447468 93 0.2138 2.319478
907 A34 19 43447802 43663369 112 -0.0355 1.951387
908 A34 19 43663624 43834506 80 -0.5385 1.376973
909 A34 19 43834848 59097854 8655 -0.0095 1.986873
以下是我为此编写的代码。
getRS <- function(CNA, samples = NULL, trial = NULL){ race <- racing.summary(subset(CNA, samplelist = samples, triallist = trial)) race$number <- (2^race$mean)*2 return(race) }
我想知道是否有可能在新函数中使用此输出来执行简单的算术运算。 我想从“开始”中减去“完成”以创建“长度”,使用上面的所有方法创建一个新的“均值”,并提取最大的“数字”以创建“最大数字”,同时不显示“标记”完全没有
类似于以下的输出:
ID trial max.length mean max.number
A34 19 20110489 -0.05260000 2.3194777
与/或
(B)
我有一个替代功能,可以使用已计算的数据创建所有患者的数据框。 我使用以下代码:
getSum <- function (){
race_mean <- as.data.frame(df %>% group_by(ID, trial) %>% summarise(mean = mean(mean)))
race_length <- as.data.frame(df %>% group_by(ID,trial) %>% summarise(max.length = max(end - start)))
seg_number <- as.data.frame(df %>% group_by(ID,trial) %>% summarise(max.number = max(number)))
race_m_l_merge <- as.data.frame(merge(x = race_length, y = race_mean))
race_m_l_n_merge <- as.data.frame(merge(x = race_m_l_merge, y = race_number))
ordered_summary <- as.data.frame(race_m_l_n_merge[order(race_m_l_n_merge$trial),])
View(ordered_summary)
}
给出这样的输出:
ID trial max.length mean max.number
1 A22 1 96637812 -1.648909e-01 2.6989533
25 A23 1 101363101 -6.275455e-02 2.2468441
49 A24 1 72598875 -5.878000e-02 2.8204004
73 A25 1 112628591 -3.346917e-01 2.0675182
97 A26 1 55490417 7.621429e-02 2.4512200
121 A28 1 130879821 -4.218571e-02 2.0679481
145 A29 1 72590096 -3.093417e-01 2.3450196
169 A30 1 32642030 4.242500e-02 2.6375528
193 A32 1 34350731 -8.188372e-02 2.1149155
217 A33 1 77537981 -1.305833e-01 2.1125713
这样,我想创建一个函数来指定要查找的ID和试用版,例如: Function("A22",1)
。
我希望我的R脚本将来可以随心所欲地用于将来的工作,因此无论对我的问题A,B还是同时对这两个问题,任何帮助都将不胜感激! 甚至是有关指向有用网站的链接的建议。 :)
如果已经定义了函数getRS
和getSum
,则可以在新函数中调用它们。
您只需getSum
中包含View(ordered_summary)
的行更改为return(ordered_summary)
或简单地ordered_summary
,这样您就可以返回可以进一步操作的对象。
lookup_function <- function(data_lookup, id_lookup, trial_lookup) {
data_df <- getRS(CNA = data_lookup)
summary_df <- getSum(df = data_df)
subset(x = results_df, subset = (ID == id_lookup & trial == trial_lookup))
}
如果您愿意,可以以简洁的方式编写此函数。
lookup_function <- function(data_lookup, id_lookup, trial_lookup) {
subset(x = getSum(getRS(data_lookup)), subset = (ID == id_lookup & trial == trial_lookup))
}
或者,如果您不想拥有三个不同的函数,则可以创建一个在其内部定义了getRS
和getSum
函数。
lookup_function <- function(data_lookup, id_lookup, trial_lookup) {
data_df <- getRS(CNA = data_lookup)
summary_df <- getSum(df = data_df)
subset(x = results_df, subset = (ID == id_lookup & trial == trial_lookup))
}
lookup_function <- function(data_lookup, id_lookup, trial_lookup) {
getRS <- function(CNA, samples = NULL, trial = NULL){
race <-
racing.summary(subset(CNA, samplelist = samples, triallist = trial))
race$number <-
(2 ^ race$mean) * 2
race
}
getSum <- function(df) {
unordered_summary <-
df %>%
group_by(ID, trial) %>%
summarise(mean = mean(mean),
max.length = max(end - start),
max.number = max(number)) %>%
data.frame()
ordered_summary <-
data.frame(unordered_summary[order(unordered_summary$trial), ])
ordered_summary
}
data_df <- getRS(CNA = data_lookup)
summary_df <- getSum(df = data_df)
subset(x = results_df, subset = (ID == id_lookup & trial == trial_lookup))
}
我已编辑的代码getSum
,因为我没有看到一个理由骂summarize
,而不是单一的时间的三倍。 当然,您可以使用自己的功能,因为我不知道手头任务的细节。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.