gpt4 book ai didi

r - 使用 sapply 帮助改进 R 编码

转载 作者:行者123 更新时间:2023-12-04 16:12:04 24 4
gpt4 key购买 nike

我正在努力处理一些代码。我可以让它以非常低效的方式工作,但认为必须有更好的方法来修复它。我正在尝试从几个不同的变量编译一个变量。在编码变量中,“跳过”被编码为特定数字(对于下面的示例“99”)。我正在尝试根据这些变量中的 10 个创建一个总成本变量。

通过这种方式,我编写了低效的代码,其工作原理是:

var1 <- ifelse(data$v1<99, data$v1, 0)  
var2 <- ifelse(data$v2<99, data$v2, 0)
...
var10 <- ifelse(data$v1<99, data$v10, 0)
sumvar <- var1 + var2 + var3 + var4 + var5 + var6 + var7 + var8 + var9 + var10

我曾尝试使用 sapply 命令使它更优雅一点,但没有奏效。我只是想看看是否有人可以给我一些提示或帮助我的代码失败的原因。我把它放到一个列表环境中(在尝试了 cbind 之类的其他方法后我认为这是正确的)并尝试进行特定的调用,但出现错误。作为示例代码,我设置了以下内容:

set.seed(1234)
data <- data.frame(x=rnorm(30), y=rnorm(30), z=rnorm(30))
data$x <- ifelse(data$x > 1, 99, data$x)
data$y <- ifelse(data$y > 1, 99, data$y)
data$z <- ifelse(data$z > 1, 99, data$z)

t.list <- list(data$x, data$y, data$z)

sumvar1 <- sapply(1:length(t.list), function(i){
tempvar <- ifelse(t.list[i] !=99, t.list[i], 0)
sumvar1 <- sumvar1 + tempvar
})

问题是当我尝试我的实际代码(或这段代码)时,我得到:

Error in storage.mode(test) <- "logical" : 
(list) object cannot be coerced to type 'double'
Calls: sapply -> lapply -> FUN -> ifelse

显然我做错了什么,但我不确定是什么。我查看了 ifelse 的帮助文件,但我不明白输出的错误消息。我已经让代码以低效的方式运行,但我真的很想获得一些关于如何改进我 future 的 R 编码的反馈和知识。

谢谢!

最佳答案

如果我正确理解你的问题,我认为你需要做的就是:

## Set any skip values to be equal to zero
data[data == 99] = 0
## Work out the row means
apply(data, 1, sum)

一个评论。您考虑使用 R 的缺失值对象 NA 而不是将 99 设置为 0。

关于r - 使用 sapply 帮助改进 R 编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5518119/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com