对于R编程和编程,我一无所知但是我有两段代码遇到了类似的问题(对我而言)。我们走了......
(A)
我目前有一个功能可以返回患者的记录,试用号和其他信息。它看起来像这样:
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)
}
我想知道是否可以在新功能中使用此输出来进行简单的算术运算。我希望减去&#39;完成&#39;来自&#39;开始&#39;创造一个新的&#39;长度&#39;,创造一个新的意思&#39;用上面的所有方法,提取最大的数字&#39;创建&#39; max.number&#39;而不显示&#39;标记&#39;一点都不。
类似于此的输出:
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或者两者中得到很多赞赏!甚至建议链接到有用的网站。 :)
答案 0 :(得分:1)
如果您已经定义了函数getRS
和getSum
,那么您可以在新函数中调用它们。
您只需将View(ordered_summary)
中包含getSum
的行更改为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
三次而不是一次的原因。当然,您可以使用自己的功能,因为我不知道您手头任务的细节。