是否可以在整个数据帧中进行二进制对数加一(log2+1)?

emr*_*mr2 2 logarithm r dataframe dplyr

这是我的数据:

\n
dat <- mtcars\ndat$Brands <- rownames(dat)\ndat$Info <- rep("Info", length(rownames(mtcars)))\n
Run Code Online (Sandbox Code Playgroud)\n

我已经看到有很多方法可以对整个数据框架执行某些操作。mutatesapply等等。但是,对于某些特定功能它不起作用。

\n

最接近的例子是如果你想做的话log2+1

\n

我已经尝试过这个...

\n
data_log <- dat %>% mutate(across(where(is.numeric), log2+1))\n
Run Code Online (Sandbox Code Playgroud)\n

但这给了我这个错误......

\n
\n

错误:mutate()输入有问题..1。\n\xe2\x84\xb9 ..1 = across(where(is.numeric), log2 + 1)。\nx 二元运算符的非数字参数\n运行rlang::last_error()以查看发生错误的位置。

\n
\n

您知道是否有办法运行此类功能?

\n

Ron*_*hah 7

您的方法是正确的,但语法需要一些更正。这里需要使用 lambda 或匿名函数。

使用dplyr您可以用作across-

library(dplyr)
dat <- dat %>% mutate(across(where(is.numeric), ~log2(.) +1))
Run Code Online (Sandbox Code Playgroud)

或者以 R 为基数 -

cols <- sapply(dat, is.numeric)
dat[cols] <- lapply(dat[cols], function(x) log2(x) + 1)
Run Code Online (Sandbox Code Playgroud)