我的单参数函数输出数据帧
public class MysteryHandler {
private static SecretKey secretKey;
private static Cipher cipher;
private static byte[] utf8Bytes;
/**Verschluesseln*/
public static byte[] encrypt(String plainText){
try {
secretKey = KeyGenerator.getInstance("AES").generateKey();
cipher = Cipher.getInstance("AES/CBC/PKCS7PADDING");
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
utf8Bytes = plainText.getBytes("UTF8");
return cipher.doFinal(utf8Bytes);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**Entschluesseln*/
public static String decrypt(byte[] secret){
try {
cipher = Cipher.getInstance("AES/CBC/PKCS7PADDING");
cipher.init(Cipher.DECRYPT_MODE, secretKey, new IvParameterSpec(secret, secret.length - 16, 16));
utf8Bytes = cipher.doFinal(secret);
return new String(utf8Bytes, "UTF8");
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
将单参数输入此函数时,它会按预期输出数据帧:
library(tidyverse)
myfun <-function(x) {mtcars %>%
filter_(x) %>%
group_by(cyl) %>%
summarise(mean(disp), mean(drat)) %>%
mutate(group=x)}
如何将这样的函数应用于参数列表,以便输出是一个数据帧,组合列表中的所有结果。例如,我想将myfun应用于列表
myfun('mpg>15')
cyl mean(disp) mean(drat) group
4 105 4.07 mpg>15
6 183 3.59 mpg>15
8 105 3.20 mpg>15
,结果,获得单个数据帧:
c('mpg>15', 'drat>4.2')
如何做到这一点(最好是在tidyverse内)?
答案 0 :(得分:3)
留在tidyverse
,可能是这样的:
c("mpg>15", "am==1") %>% map(myfun) %>% bind_rows
但是,正如@alistaire在评论中指出的那样,你可以通过使用map_df
来缩短它,它会返回一个数据框:
c("mpg>15", "am==1") %>% map_df(myfun)
混合选项,三种等效方式,使用lapply
:
lapply(c("mpg>15", "am==1"), myfun) %>% bind_rows
c("mpg>15", "am==1") %>% lapply(myfun) %>% bind_rows
bind_rows(lapply(c("mpg>15", "am==1"), myfun))
或者,对于混合基数和整数反应有点不正常:
c("mpg>15", "am==1") %>% lapply(myfun) %>% do.call(rbind, .)
对于基础R传统主义者:
do.call(rbind, lapply(c("mpg>15", "am==1"), myfun))