小编MIH*_*MIH的帖子

列表列表R上的lapply函数/循环

我知道这个主题在SO上出现了几次,但是这些例子往往更复杂,我想对这个简单的情况有一个答案(或一组可能的解决方案).我仍然围绕着R和编程一般.所以在这里我想使用lapply函数或一个简单的循环来data列出哪个是三个向量列表的列表.

data1 <- list(rnorm(100),rnorm(100),rnorm(100))
data2 <- list(rnorm(100),rnorm(100),rnorm(100))
data3 <- list(rnorm(100),rnorm(100),rnorm(100))

data <- list(data1,data2,data3)
Run Code Online (Sandbox Code Playgroud)

现在,我想获得每个向量的均值列表.结果将是三个元素(列表)的列表.

我只知道如何获得矢量列表的结果列表

for (i in 1:length(data1)){
        means <- lapply(data1,mean)
}
Run Code Online (Sandbox Code Playgroud)

或者:

lapply(data1,mean)

我知道如何使用所有方法rapply:

rapply(data,mean)

问题是rapply不维护列表结构.非常感谢帮助和可能的一些提示/解释.

loops r list lapply

17
推荐指数
1
解决办法
2万
查看次数

在栅格列表列表上执行循环

需要解决方案,将非常感谢帮助.

在下面的代码中,我创建了三个栅格.然后我number在这个栅格上创建一个随机的点位置,我收到一个三个矩阵的列表,其中包含那些随机位置的坐标samples.然后,我将这些位置和样本栅格值接收samplevalues.

我想改变的是,我想创建一组100,150,200和250个随机点位置(numberv).因此,在生成这些位置并接收位置列表后,每个栅格将被采样length(numberv) 次数(在这种情况下为4次).因为我有三个栅格,所以我想得到一个列表,第一个元素包括从我的三个栅格中获得的采样值,每个采样100次,第二个栅格值每次采样150次,等等.列表将包含length(numberv)元素.然后我会使用这些位置来获取这些位置的栅格值.

我只用一个样本(使用了1个元素向量number)粘贴了一个简单案例的干净代码,希望它有所帮助.

y <- matrix(1:300,100,3)
mv <- c(1,2,3)
rep = 200

valuematrix <- vector("list",ncol(y))

for (i in 1:ncol(y)) {
        newmatrix <- replicate(rep,y[,i])
        valuematrix[[i]] <- newmatrix
}

library(sp)
library(raster)

rasters <- setNames(lapply(valuematrix, function(x) raster(x)), 
                    paste0('raster',1:length(mv)))

# Create a loop that will sample the rasters

library(dismo)

number = 100                        # current number for random sample points number
numberv = c(100,150,200,250)        # sample number vector i want …
Run Code Online (Sandbox Code Playgroud)

loops r list raster lapply

6
推荐指数
1
解决办法
613
查看次数

将列值乘以另一个值,具体取决于某列R中的值

在下面的数据集中,我想将列中Size的值乘以值Month1,Month2或者Month3取决于列中的数字Month.因此,如果在某一行中Month值为2,我想将列中Size的值乘以列中的值Month2,并将结果保存在新列中NewSize.非常感谢您的帮助!

Orig = c("A","B","A","A","B","A","A","B","A")
Dest = c("B","A","C","B","A","C","B","A","C")
Month = c(1,1,1,2,2,2,3,3,3)
Size = c(30,20,10,10,20,20,30,50,20)
Month1 = c(1,0.2,0,1,0.2,0,1,0.2,0)
Month2 = c(0.6,1,0,0.6,1,0,0.6,1,0)
Month3 = c(0,1,0.6,0,1,0.6,0,1,0.6)
df <- data.frame(Orig,Dest,Month,Size,Month1,Month2,Month3)
df

  Orig Dest Month Size Month1 Month2 Month3
1    A    B     1   30    1.0    0.6    0.0
2    B    A     1   20    0.2    1.0    1.0
3    A    C     1   10    0.0    0.0    0.6
4    A    B     2   10 …
Run Code Online (Sandbox Code Playgroud)

r rows dplyr

5
推荐指数
1
解决办法
4231
查看次数

将嵌套 for 循环转换为 R 中的并行循环

下面您可以在 R 中找到一段代码,我希望将其转换为使用多个 CPU 作为并行进程运行。我尝试使用foreachpackage,但没有走得太远。考虑到我有 3 级嵌套循环,我找不到一个很好的例子如何让它工作。我们将非常感谢您的帮助。下面的代码示例 - 我做了一个简单的函数,因此它可以作为示例:

celnum <- c(10,20,30)
t2 <- c(1,2,3)
allrepeat <- 10

samplefunction <- function(celnum,t2){

        x <- rnorm(100,celnum,t2)
        y = sample(x, 1)
        z = sample(x,1)

        result = y+z


        result 
}
Run Code Online (Sandbox Code Playgroud)

常规方式获取结果:

z_grid <- matrix(, nrow = length(celnum), ncol = length(t2))

repetitions <- matrix(, nrow = allrepeat, ncol = 1)



set.seed=20
for(i in 1:length(celnum)){
        for (j in 1:length(t2)){
                for (k in 1:allrepeat) {
                        results <- samplefunction(celnum[i],t2[j]) 
                                repetitions[k] <- results
                                z_grid[i,j] <- mean(repetitions,na.rm=TRUE) 
                } …
Run Code Online (Sandbox Code Playgroud)

parallel-processing foreach r parallel-foreach

4
推荐指数
1
解决办法
6658
查看次数

给定R中的特定概率值,生成随机数(0和1)

我在R中找不到这个问题的答案.我想生成0到1'随机样本'的随机样本.对于每个样本,我希望有一个特定数量的值'numval',它是从矢量'Prob'的长度导出的.'Prob'给出了每个单独的点将为0或1的概率值.因此,在这种情况下,第一个数字的概率值为0.9为1,0.1为0.依此类推.然后,我想重复随机样本生成1000次.我有一个脚本(下面)生成随机0和1,但我在给出概率值时缺少组件.非常感谢帮助 - 我对R来说相当新.

Prob <- c(0.9, 0.3, 0.6, 0.8, 0.23, 0.45, 0.1, 0.3, 0.5, 0.03)
RandomSample <- list()
zeroones <- c(0,1)
rep = 1000
numval <- length(Prob)

for (i in 1:rep) RandomSample[[i]] <- c(sample(zeroones,numval,replace = TRUE))
t(sapply(RandomSample, unlist, simplify = TRUE))
Run Code Online (Sandbox Code Playgroud)

random r sample probability random-sample

3
推荐指数
1
解决办法
6077
查看次数

使用 dplyr 包 R 改变 data.frame 或 tibble 中选定的列

我想mutate一次将一个函数应用于多个列。列以特定字符串开头,这就是它们的标识方式。我还想知道如何将其应用于由索引标记的列的解决方案,即。data_fake[3:4]. 目标是删除所有非数字字符并将值转换为数字。不能让它伤心地工作。代码末尾给出了所需的结果。非常感谢。

data_fake <- data.frame(c("1","2","NA","3,","2","1 only"),c(1,2,3,4,5,6),
                        c("23","3 bundles","4","5","NA","1"), c("3","5 packs","6","78","7","8"))
colnames(data_fake) <- c("AB foo ab", "AB foo bc", "CD foo ab","CD foo bc")

data_fake <- as_tibble(data_fake)

data_fake %>%
        select(starts_with("CD foo")) %>% 
        mutate(as.numeric(gsub("[^0-9]", "")))

data_fake_results <- as_tibble(data.frame(c("1","2","NA","3,","2","1 only"),c(1,2,3,4,5,6),
                        c(23,3,4,5,NA,1), c(3,5,6,78,7,8)))
Run Code Online (Sandbox Code Playgroud)

r dataframe dplyr

3
推荐指数
1
解决办法
627
查看次数

拉伸 x 轴并对 ggplot2 R 中直方图中的值范围应用不同的 binwidth

这是我想要构建的 ggplot 示例。在我的数据中,我遇到一个问题,即在直方图的一小部分中有很多值。因此,我想让 x 轴不成比例地拉伸(此处位于 的值之间80,81,82,83,84,85)。因此,刻度线将在图表上均匀分布,并且刻度线之间的间距将与该图表上值的增量增加不成比例。因此,我还想对直方图的该部分应用不同的箱大小(比方说binwidth = 1)。

library(ggplot2)

set.seed(42)
data <- data.frame(c(rnorm(mean=80,sd=20,30)),seq(1,30,1),
                   c("A","B","B","A","A","B","B","A","A","A",
                     "A","B","B","A","A","B","B","A","A","B",
                     "B","A","A","B","B","A","A","B","B","A"))
colnames(data) <- c("vals","respondent","category")
# Plot the number of vals
ggplot(data,aes(x = vals,fill = category)) + 
        geom_histogram(position = "stack",binwidth = 5) +
        ggtitle("plot")+
        #scale_x_continuous(c(40,50,60,70,80,81,82,83,84,85,95,105,115))+
        theme_minimal() +
        ylab("Number of respondents")+xlab("Number of vals")
Run Code Online (Sandbox Code Playgroud)

r axes histogram ggplot2

3
推荐指数
1
解决办法
3733
查看次数

用R中的某些值计算栅格面积

我有一个raster图像 (.tif),每个像素的连续值在 0 和 1 之间。我想计算这个区域(也可以是多个像素),raster其中的值在一组值间隔中:即 0.1 - 0.2 , 0.3 - 0.4, 0.7 - 0.8。最终目的是看哪个区间占据的面积更大。有什么想法可以尝试或如何处理它R

r raster r-raster

0
推荐指数
1
解决办法
5660
查看次数